一些crontab的使用建议及排错思路

2018/08/28 linux

一些crontab的使用建议及排错思路

将系统涉及的环境变量都添加到cron的默认环境变量中

可以避免每次都在脚本中引入环境变量或使用source初始化

如CentOS,可以在/var/spool/cron/root中或使用crontab -e命令添加所有使用到的环境变量

PATH=/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/apache/bin:/usr/local/mysql/bin:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Ubuntu and Debian 系统可以在/etc/crontab中声明环境变量

PATH=/usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/apache/bin:/usr/local/mysql/bin:
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

脚本第一行要以#!(Sha-Bang)开头并跟上对应的解释器路径

不解释~~

Sha-Bang(#!)所在行的作用是告知该脚本使用的是哪种命令解释器

PS,当然也可以在cron中使用SHELL=/bin/bash声明shell的解释器,也可以使用0 5 * * * . $HOME/.profile; /path/to/command/to/run 先载入环境变量再执行。

脚本要加执行权限

这个是最基本的了

结合日志分析

如果还是未找到原因,可追加日志,之后进一步分析

示例:

59 11 * * * /bin/bash /scripts/get_douban_hot_movie.sh >> /root/mylog.log 2>&1

错误分析

cron: Error: bad username

该错误提示为/etc/crontab中指定了不存在的用户,本例中为ubuntu,实际该用户并不存在。

crontab_1.png crontab_2.png crontab_3.png

参考

where-can-i-set-environment-variables-that-crontab-will-use

crontab.5.html

how-can-i-run-a-cron-command-with-existing-environmental-variables

Search

    Table of Contents