今天在给自己公司写个定时运行脚本的时候,使用crontab -e 编辑定时文件,打算每30分钟运行一次的脚本,进行对服务器网络使用情况进行分析并输出的脚本。
由于数据行多,所以打算使用时间进行每运行一次创建一个文件。
最开始的写法是这样的:

*/1 * * * * sh /root/xxx.sh >> /root/`date +%y-%m-%d_%H:%M:%S`.log

然后重启服务后,发现都没法运行。
单独运行好像也没啥问题。查了cron服务 也是正常的。
我将他改成:

*/1 * * * * sh /root/xxx.sh >> /root/xxx.log

也是有效的。
最后就是 date +%y-%m-%d_%H:%M:%S.log` 这一段的问题了。
最后查了下资料发现,在终端中运行,习惯上的date +"%Y%m%d_%H:%M" 和 $(date +"%Y%m%d_%H:%M")在crontab下不起作用,需采用如下形式 date +"\%Y\%m\%d_\%H:\%M" $(date +"\%Y\%m\%d_\%H:\%M")
这是因为%在crontab里面是有特殊的意义的,crontab中的%是换行的意思,在使用时需要使用做转义。

参考:https://www.cnblogs.com/leleyao/p/10431861.html