一、crontab日志
使用crontab时一个重要需求是查询log。因为定时任务没有显式的terminal弹出,因此执行是在后台进行的。为了实时了解定时任务执行的情况,需要了解crontab的日志访问方法。
grep CRON /var/log/syslog
但是这个只能显示crontab运行的概况信息。如果想要详细了解,需要查看mail
tail -f /var/mail/$USER
这个方式其实对于crontab任务来说挺重要的。因为这样可以直接看到计划任务中的脚本在屏幕上的输出结果。值得注意的是,如果之前没有用过crontab,在这里应该是找不到相关文件的。此时需要安装一个postfix:
sudo apt-get install postfix
注意:安装postfix时最好选择local那个发送邮件选项。否则是创建不了/var/mail/$USER路径的。安装好之后应该就可以查看邮件了。可以将查看cron邮件的命令以alias或者函数的形式加到bashrc中,这样每次就可以快捷访问该命令了。
二、使用中的坑:
1. crontab中的环境和主机环境相差很大。
crontab中的环境非常简单,可以在crontab上挂一个/bin/echo $PATH然后重定向到某个日志来观察,结果应该只有两三条路径,和本机的PATH相差很大。因此最好将本机环境变量PATH的具体内容显式地在cron脚本中export出来:
export PATH=$PATH:/home/sensetime/.autojump/bin:/opt/ros/kinetic/bin:/usr/local/cuda-9.0/bin:/home/sensetime/bin:/home/sensetime/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin:/usr/local/bin:/usr/local/autoware/bin:/usr/local/autoware/bin:/home/sensetime/miniconda3/bin:/usr/local/autoware/bin
2. crontab默认用的是dash
crontab应该是像ubuntu一样,用dash而不是bash作为默认的shell。注意dash是没有source命令的。故可以在crontab -e最上面加上一条: SHELL=/bin/bash
3. 某些计划任务的运行结果不会发送邮件
原因暂时不知道
三、常见用法
开机运行脚本:
@reboot /path/to/script.shrun cron task immediately
https://unix.stackexchange.com/questions/42715/how-can-i-make-cron-run-a-job-right-now-for-testing-debugging-without-changing