linux下可以通过配置crontab来定时执行任务,执行体可以是一条系统命令或自己写的一个脚本,同时可以指派用户来执行。配置crontab有两种方法。
1
crontab -e
就可以进入配置文件。此时配置crontab的执行者是当前登入用户,如果当前用户是root,需要为其他用户配置,可以使用
12345
crontab -e -u 用户名或su 用户名crontab -e
这种方法有一个缺点,就是当前系统中配置的crontab不在一个配置文件中,让管理员不方便查询系统到底有多少个crontab。
123456789101112131415
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# | .------------- hour (0 - 23)# | | .---------- day of month (1 - 31)# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# | | | | |# * * * * * user-name command to be executed
要添加新的crontab,只需要在文件最后增加即可。注意这里面需要指定用户名;而方法1中则不需要,如果指定了,它会认为是命令的一部分,从而可能导致crontab执行失败。
如果服务器都是有root来管理,建议添加crontab使用方法2,这样系统中的所有计划任务都在一起,一目了然。
我在配置Laravel的计划任务的时候有这样一条配置
123
vi /etc/crontab * * * * www /bin/php /data/wwwroot/51ito.io/ethgo/artisan schedule:run >> /dev/null 2>&1
正常保存以后发现计划任务并没有顺利执行, 随想这去查看日志
tail -10 /var/log/cron
1234567891011
Jul 25 12:35:01 ip-172-31-45-45 CROND[24729]: (www) CMD (/bin/php /data/wwwroot/51ito.io/ethgo/artisan schedule:run >> /dev/null 2>&1)Jul 25 12:35:01 ip-172-31-45-45 CROND[24729]: (CRON) ERROR chdir failed (/home/www): No such file or directoryJul 25 12:36:01 ip-172-31-45-45 CROND[24782]: (www) CMD (/bin/php /data/wwwroot/51ito.io/ethgo/artisan schedule:run >> /dev/null 2>&1)Jul 25 12:36:01 ip-172-31-45-45 CROND[24782]: (CRON) ERROR chdir failed (/home/www): No such file or directoryJul 25 12:37:01 ip-172-31-45-45 CROND[24834]: (www) CMD (/bin/php /data/wwwroot/51ito.io/ethgo/artisan schedule:run >> /dev/null 2>&1)Jul 25 12:37:01 ip-172-31-45-45 CROND[24834]: (CRON) ERROR chdir failed (/home/www): No such file or directoryJul 25 12:38:01 ip-172-31-45-45 CROND[24887]: (www) CMD (/bin/php /data/wwwroot/51ito.io/ethgo/artisan schedule:run >> /dev/null 2>&1)Jul 25 12:38:01 ip-172-31-45-45 CROND[24887]: (CRON) ERROR chdir failed (/home/www): No such file or directoryJul 25 12:39:01 ip-172-31-45-45 CROND[24940]: (www) CMD (/bin/php /data/wwwroot/51ito.io/ethgo/artisan schedule:run >> /dev/null 2>&1)Jul 25 12:39:01 ip-172-31-45-45 CROND[24940]: (CRON) ERROR chdir failed (/home/www): No such file or directoryJul 25 12:40:01 ip-172-31-45-45 CROND[24995]: (www) CMD (/bin/php /data/wwwroot/51ito.io/ethgo/artisan schedule:run >> /dev/null 2>&1)
意思就是指定某一个执行计划任务的时候需要这个用户必须有家目录, 那么进行以下操作
cd /homemkdir wwwchown -R www:www www
经过以上的一番操作, 正常运行
修改rsyslog
vim /etc/rsyslog.d/50-default.conf
搜索cron 把如下行之前的注释”#”去掉
#cron.* /var/log/cron.log
重启rsyslog
sudo service rsyslog restart
现在看看定时任务的日志
tail -f /var/log/cron.log
重启
/etc/init.d/cron restart
http://www.netingcn.com/crontab-designate.html