Cron定时任务执行
最近需要在VPS上定时自动拉取git上最新的hugo源文件,并编译成web发布到nginx。
直接使用CentOS自带cron定时任务就可以完成。
1. 检查crond服务
检查crond服务是否启动
service crond status
status返回Running,Active之类就正常启动,如果服务未启动就启动服务。
service crond start
service crond stop
2. Cron job格式
查看cron job的格式定义 在crontab里查看cron job命令的格式定义
cat /etc/crontab
# 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
发现前面5个星号分别代表执行 分钟、小时、日、月、星期。 后面是要执行的命令。
3. 准备cron job的格式命令
我想每天的0点和12点各执行一次,就可以配置成 分钟到达0,小时达到0或者12,日、月、星期都任意。注意这里的时间是按服务器的时区来执行。
执行的命令是一个sh批处理(后面再写批处理内容),并把批处理的输出写入到log文件。
0 0,12 * * * /xxx/xxx/cron_site.sh >> /xxx/xxx/cron_site.log
4. 应用crontab
列出crontab所有定时任务
crontab -l
编辑crontab定时任务
crontab -e
把之前的命令写入,然后和vim一样:wq保存退出
0 0,12 * * * /xxx/xxx/cron_site.sh >> /xxx/xxx/cron_site.log
5. 任务批处理
批处理包含了记录执行时间,拉取git最新文件,hugo编译把web输出到nginx目录,reload nginx这3步。
vim cron_site.sh
#!/bin/bash
echo "\n===================="
echo $(date +%F%n%T)
cd /xxx/xxx/git_site
git pull
if [ $? -ne 0 ]; then
echo "error: Github pull error!!!"
exit 1;
fi
../hugo -d /usr/local/nginx/html/
if [ $? -ne 0 ]; then
echo "error: Hugo Build error!!!"
exit 1;
fi
/usr/local/nginx/sbin/nginx -s reload
if [ $? -ne 0 ]; then
echo "error: Nginx reload error!!!"
exit 1;
fi
echo "Success."
最后给sh文件加上执行权限
chmod +x cron_site.sh
Last modified on 2023-11-01