本文是综合网上多篇文章,加上自己遇到的问题,进行的总结
因为需求需要,需要在linux下定时执行php文件,通过查资料了解到,在linux中一般是用crondtab服务来做定时任务的(类似于windows的定时任务)。crondtab是linux自带服务,如果没有安装自行安装就好。
1.安装crondtab服务(如果系统没有crondtab服务)
yum install crontabs
相关命令说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令:ntsysv
加入开机自动启动:
chkconfig –level 35 crond on
2.配置定时服务 /var/spool/cron路径下,找到root配置文件,添加以下需要定时执行的服务
*/1 * * * * /bin/sh /usr/share/nginx/html/a.sh > /dev/null 2>&1 &
添加完配置之后要重启crond服务才会生效 /sbin/service crond restart
这里是定时执行sh文件,注意前面的/bin/sh也要加上,如果不加上会遇到访问a.sh时,提示权限不足Permission denied
a.sh的内容是:/usr/bin/php /usr/share/nginx/html/index.php >> /a.log 2>&1
这样就会每分钟执行index.php文件。在调试过程中,最好用命令行先执行a.sh文件和cron配置文件的命令,如果在控制台能正常运行,一般定时脚本运行的时候,不会有什么问题。a.sh里面加了一个a.log文件,这个文件保存的是index.php的运行结果(包括错误输出),这样更方便调试
在工作上遇到一件极坑的事情,crondtab一直不执行sh文件,配置什么的都没有错 ,但是日志里面显示
PAM pam_end: NULL pam handle passed
最后排查结果是,因为这行命令在配置文件里面是最后一行,但是这一行命令后面没有回车,就不执行,好坑。
后来加了回车就可以执行了。至于这个原因,没找到。