最近一个项目,需要用到一个定时任务,先说crontab的常用命令。
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 crontab -l //列出某个用户cron服务的详细内容 crontab -r //删除没个用户的cron服务 crontab -e //编辑某个用户的cron服务
接下来我的调试过程
(1)编辑加入自己的命令
crontab -e //编辑某个用户的cron服务
*/1 * * * * /usr/bin/php /var/send.php 每分钟都执行一次
send.php
编辑如下
<?php echo 'this is a work'; ?>
没有出现运行结果,于是乎,就去查看日志,结果在/var/log下没有发现 cron.log文件,这我就纳闷了,why?
经过研究发现原来日志服务器rsyslog没有开启对crontab的支持,接下来进入/etc/rsyslog.d/
cd /etc/rsyslog.d/ ls 20-ufw.conf 50-default.conf //会有连个文件
vim 50-default.conf
编辑如下:
找到 cron.* 所在行
# Default rules for rsyslog. # # For more information see rsyslog.conf(5) and /etc/rsyslog.conf # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog cron.* /var/log/cron.log #daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log #lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log #user.* -/var/log/user.log
去掉前面的#。ok,接下来 使用命令cron restart重启,啊哟,报错了,
cron: can’t lock /var/run/crond.pid, otherpid may be
解决方案:
rm /var/run/crond.pid
ps -A | grep cron
kill 进程ID
然后继续 cron restart,Ok了,但是还没还结果,现在我们可以看看日志啦。
tail /var/log/cron.log
发现错误如下:
(CRON) info (No MTA installed, discarding output)
出错原因:
报错的主要原因是没有配置邮件服务器.
有两个原因会导致这个错误发生:
1,当你执行命令是shell脚本时
解决方案:在每条命令后面加上:
>/dev/null 2>&1
2,当你向窗口输出时,因为内容的输出是cron通过邮件发送的
解决方案:将输出内容导入一个文件 >> /tmp/test.txt
更过的进阶技术可以关注公众号:进阶的脚步 回复:学习资料 有惊喜哦