记录 Cron 定时任务因环境变量引发的问题

同事生产环境遇到一个cron定时任务备份pgsql数据库问题,备份的文件是空文件,手动执行脚本没有任何问题。
cron定时任务和手动执行脚本区别就在于执行时的环境变量不同,最一开始就想到应该是环境变量导致的问题。最终找到问题所在,现将思路整理并记录:
1./etc/crontab文件定义了使用的shell、path环境变量和邮件通知人。
2./etc/cron.access与/etc/cron.deny定义了使用crond进程的黑白名单,/etc/cron.allow优先级高于/etc/cron.deny。
3./var/log/cron文件记录了定时任务日志。
4.定时任务中涉及文件路径时最好写绝对路径。
5.定时任务中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%。
6.定时任务中的su操作需要密码的情况可考虑expect脚本。
7.定时任务中使用到重定向的时候最好最后加上2>&1以将所有信息都记录可用于排错。否则仅有错误输出而没有标准输出将只得到一个空文件。
8.定时任务中通过source引入环境变量和export导出为全局变量。需特别注意此处的全局变量是指在脚本运行环境及脚本的子shell生效的全局变量。
9.定时任务中引用外部变量可参考如下链接:
https://unix.stackexchange.com/questions/27289/how-can-i-run-a-cron-command-with-existing-environmental-variables

上一篇:elementUI 日期选择器获取CRON值


下一篇:Cron表达式