今天用crontab去自动执行一个任务(shell脚本),任务在命令行模式下执行很是正确,可是当crontab调度任务时,任务却没法正常执行。具体表现为:找不到变量;任务在同一时刻被执行屡次。shell
解决办法bash
1:crontab自动执行脚本时,没法带入shell的环境变量,须要在脚本文件中引用 /etc/profile和/$HOME/bash_profile脚本。spa
#!/bin/bash . /etc/profile . /$HOME/.bash_profile echo "hello world" > tmpfile rm tmpfile
2:crontab执行出错时,能够再 /var/spool/mail/root(当前用户名)下看邮件信息,同时也能够在 /var/log/cron中查看信息。命令行
cat /var/spool/mail/root | tail -n 100 cat /var/log/cron | tail -n 100
当发如今同一时刻,crontab所调度的任务被执行屡次或者有多个error信息时,能够断定在该时刻crontab任务被执行了屡次,这时应查看系统进程信息,看是否有多个cron服务在运行,以下:code
ps -aux | grep cron
若是有多个cron进程,kill掉全部的,重启crond,以下:进程
killall cron crond
3:crontab执行任务时,不会进入到任务所在的目录执行任务,而是在当前用户的$HOMRE目录下执行的。所以当任务中有涉及到目录处理时,应尽可能使用绝对路径。若是使用了相对路径,在crontab命令设置时候应先用cd命令进入到目录,而后在执行任务,crontab -e 打开配置文件后,配置以下:crontab
*/10 * * * * cd /home/work/testCron && ./testCron.sh
4:crontab配置文件格式为class
分(0-59) 小时(0-23 ) 天(1-31) 月(1-12) 星期(0-6:0为周末) 命令test
该六部分之间用空格隔开;具体格式可查看 /etc/crontab变量
cat /etc/crontab