有的时候需要开机后就启动,但是在开机的时候又因为某些原因启动不起来的情况下,可以在开机后,让定时任务来执行启动任务。
设置定时任务
首先确保crond服务已安装和开机启动。
启动服务命令systemctl start crond
设置开机启动命令systemctl enable crond
。
执行命令crontab -e
,写入以下定时任务配置信息(有人说末尾要换行,这里没有测试),命令涉及的文件必须使用绝对路径,相关执行脚本添加执行权限,加权命令chmod +x /path/to/start.sh
。
*/1 * * * * /path/to/start.sh
然后使crond服务reload,查看reload状态
systemctl reload crond
systemctl status crond
写文件的方式
上面的方式适合手动设置,另外一种可以写文件的方式配置。
编辑文件vim /var/spool/cron/root
,此文件会被crond服务每分钟检查一次,以判断是否需要更新任务,不需要重启服务。
在网上看到有的会提示指定user name,这里就使用了默认的root。
配置的内容是一样的,举例:
*/1 * * * * /path/to/start.sh
*/1 * * * * /usr/bin/python /path/to/start.py
编写启动脚本
脚本start.sh
如下
ret=$(ps -ef | grep python | grep -v grep)
start_command="python main.py"
crond_log=/path/to/crond.log
run_log=/path/to/run.log
function logger() {
local msg=$1
echo "$(date) ${msg}" >> ${crond_log}
}
if [ -z "${ret}" ]; then
cd /path/to/dir
nohup ${start_command} 2>&1 >> ${run_log} &
wait
logger "execute start command"
else
logger "existed, no need to execute"
fi
完工,其实关闭的也可以这样写,stop.sh,restart.sh,etc。更完善的应该是单一脚本支持,start\stop\restart啦,这里只是快速实现。
无法正常指定定时任务
一般可以从这几个日志里面看问题
- /var/log/cron(定时任务具体的执行情况)
- /var/log/cron-20210104(类似这样的文件是日志备份文件)
- /var/log/maillog(root的定时任务如果程序有输出,会写入到/var/spool/mail/root,这里可以看到相关的日志)
目前遇到过的问题:
- 主机名不能为纯数字
- /var/spool/mail/root过大(49M)。