通过脚本创建的开机自启Cron任务无法执行指定脚本
通过脚本创建的开机自启Cron任务无法执行指定脚本
看了你的问题和提供的日志信息,我马上找到问题所在了!
先理下你的情况:你写了个bash脚本用来加载Cron任务文件,里面配置了@reboot执行指定脚本并输出日志,但重启后日志没生成,手动执行crontab命令也没用。从你给出的journalctl日志里,有一行关键内容:
Aug 10 05:40:06 uncommissioned CRON[766]: (user) CMD (/home/user/commissioning/20_run_commissioning.sh >> /home/user/commissioning/cron.log 2>&1^M)
注意命令末尾的^M——这是Windows风格的换行符(CR字符),Unix/Linux系统下的Cron会把这个字符当成命令的一部分,导致实际执行的命令带了多余字符,自然无法正常运行你的脚本,日志也不会生成。
解决步骤:
- 转换Cron任务文件的换行符为Unix格式
如果你装了dos2unix工具,直接执行:
如果没有dos2unix /home/user/folder/tmp/crontab-reboot-part-2.txtdos2unix,用sed命令去掉末尾的CR字符也可以:sed -i 's/\r$//' /home/user/folder/tmp/crontab-reboot-part-2.txt - 重新加载Cron任务
执行你原来的命令更新Cron:crontab /home/user/folder/tmp/crontab-reboot-part-2.txt - 验证任务是否正确
用crontab -l查看当前用户的Cron任务,确认那一行末尾没有^M字符。
另外补充下:你的脚本权限-rwxrwxr-x是没问题的,用户有执行权限;而且日志里显示Cron确实触发了@reboot任务,所以问题完全出在换行符上,调整后应该就能正常运行了。
备注:内容来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

