1、脚本.sh需要带上#!/bin/bash开头,并且赋执行权限
chmod +x xxxx.sh
2、crontab -e编辑定时任务,内容如下,要用绝对路径
在CentOS 7中是5个时间,还有很多系统没有实现符号L和问号?,使用会报错避免使用
01 19 * * * /bin/bash /root/scripts/test.sh
01 19 17 * * /bin/bash /root/scripts/monthly.sh
01 19 * * * /bin/bash /root/scripts/daily.sh
3、如果脚本没有执行,先查询定时日志,看是不是定时任务已经执行:
tail -1000 /var/log/cron
出现过你上面编辑过的脚本名称的话,就是定时任务已执行。
4、如果脚本没有显示执行,请检查2个地方
第一个是crond是否已启用
systemctrl status crond
systemctrl restart crond
第二个是设置的时间是否正确
5、如果确实脚本已执行,但没有效果
那么首先手工执行下脚本看是否有问题,确保脚本没问题。
如果脚本没问题,剩下最大可能是脚本中的环境变量问题,需要在脚本开头加上以下这几句
#!/bin/bash
. /etc/profile
. ~/.bash_profile
当然还有其它办法,详情请参阅文后参考文章。
总的来说
1、脚本有问题,2、脚本未赋执行权限,3、环境变量问题,4、编辑的时间不对,5、系统时间不对。对照逐一检查。
6、脚本执行后,打命令时会出现邮件提示
您在 /var/spool/mail/root 中有新邮件
或
You have new mail in /var/spool/mail/root
这是因为定时任务执行后会生成日志并邮件通知,需要删除并禁用邮件:
查看邮件
mail
删除邮件
cat /dev/null > /var/spool/mail/root
禁止系统启动邮件检查
echo "unset MAILCHECK" >> /etc/profile
这样就不再有邮件提示了
参考:
https://tool.lu/crontab
https://www.cnblogs.com/wangyin2005/p/16854767.html
https://blog.youkuaiyun.com/2004v2004/article/details/131169292
https://blog.youkuaiyun.com/qq_32923745/article/details/78286385
https://www.coonote.com/linux-note/crontab-environment-variables-execution.html
https://blog.youkuaiyun.com/zxfjnfjcn/article/details/106543516