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