采用crontab定时任务执行脚本.sh时遇到问题和解决方法

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.csdn.net/2004v2004/article/details/131169292
https://blog.csdn.net/qq_32923745/article/details/78286385
https://www.coonote.com/linux-note/crontab-environment-variables-execution.html
https://blog.csdn.net/zxfjnfjcn/article/details/106543516

你可能感兴趣的:(linux,bash)