crontab中反引号和$()无效的解决
crontab中反引号和$()⽆效的解决问题描述
1.增加了⼀条crontab,删除本⽉中2天以前的⽇志
10 02  * * * /bin/find /data/logs/php/$(date  +%Y%m)/ -mtime +2 | xargs rm -rf
可是看上⾯的crontab总是运⾏失败,然后查/var/log/cron ⽇志报
Jul 22 02:02:01  localhost CROND[7699]: (root) CMD (/bin/find /data/logs/php/`date +")
显⽰$(date  +%Y%m) 这个有问题,在终端上运⾏是没问题的,后来搜索baidu
问题原因:
性格类型在crontab中%字符被认为是换⾏,所以你的命令中有%时,在crontab中要加\转义
⽐如
30 * * * * date '+%D' >datefile
是错误的
正确的应该是
30 * * * * date '+\%D' >datefile
所以上⾯正确的crontab是:
10 02  * * * /bin/find /data/logs/php/$(date  +\%Y\%m)/ -mtime +2 | xargs rm -rf
扩展
造成crontab⽆法正常运⾏的常见原因
问题及对应解决⽅法
【1】脚本的执⾏权限问题
写好脚本后,要赋予脚本执⾏权限,避免权限问题
玫瑰 含义
<1>赋予脚本执⾏权限
chmod +x test1.sh
【2】脚本在crontab⾥的路径问题
<1>查看crontab中,你的脚本的位置是否有错误
谁知盘中餐粒粒皆辛苦的作者是谁
注意是否字符错误
查看计划任务:
crontab -l
写⼊计划任务:
crontab -e
<2>如⽆错误,查看路径是否错误
在计划任务⾥要使⽤全路径
例如:
*/5 * * * * /App/test/test1.sh
高级装扮兑换券怎么用
<3>修改有问题的字符或路径即可
【3】计划任务的时间设置问题
<1>查看计划任务的时间是否设置的有问题
如果crontab设置的时间错误,会导致⽆法按原计划时间进⾏任务
计划任务的5个*号依次代表的含义:
分时⽇⽉周
<2>如有问题,修改为正确的时间即可英雄联盟打不开
【4】脚本的头部问题
<1>查看⼀下你的脚本的头部,查看你为脚本设置的解释器
<2>查看当前系统是否包含此解释器或路径是否与脚本头部相同
可以⽤whereis 查看,例如
whereis sh
<3>如果是脚本的解释器的路径有误,将脚本的头部的路径修改为当前系统的路径即可
【5】脚本的执⾏命令问题
在Linux系统中,使⽤crontab执⾏脚本,由于crontab没有环境变量,它是不到你使⽤的命令的,需要使⽤命令的全路径,才可使⽤命令例如:使⽤python
0 1 * * * /usr/bin/python /App/test/test1.py
【6】环境变量的问题
这个是最常见的问题。
crontab执⾏计划任务时,它并不会从⽤户的profile⽂件中读取环境变量,所以会导致命令执⾏失败。
<1>让脚本读取环境变量
在你的脚本的开头中添加如下⼏⾏,也可读取其他变量⽂件
#!/bin/bash
source /etc/profile
source ~/.bash_profile
补充
【1】crontab的环境变量
如果遇到crontab中脚本的执⾏命令⽆法使⽤的情况,也可以通过修改/etc/crontab中的PATH添加变量
【2】crontab特殊字符
文成公主进藏在crontab中,%是⽤来表⽰换⾏的。因此,如果有使⽤%,需要在前⽅加⼊\进⾏脱义。
例如date +%F,在crontab中,要写为date +\%F

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。