最近想要配置一个定时任务来重启一个Golang程序,因为是在服务器上,所以决定用Linux的crontab来设置。

Crontab

crontab是用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。

crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

具体用法网上很多,这里不再赘述。

结束进程

对Linux稍微有所了解便可知一般用 kill PID来结束特定进程,然后可能会出现类似下面的提示信息:

/home/user/script: line XXX: 93290 Killed       <prog>

如果我一次行kill多个进程,很可能因为这个输出而没能成功,因此需要去除。考虑如下脚本:

#!/bin/bash

for pid in $(pgrep -f go);
do
{ kill $pid && wait $pid; } 2>/dev/null
done

cd /root/lcid-go

nohup /usr/local/go/bin/go run ./main.go > /dev/null 2>&1 &

其中$(pgrep -f go)找出所有go程序,当然能换成其他的,只要找出所有想要结束的进程的pid。最后一行是重新启动这个go程序。

此脚本保存为~/restart.sh

设置定时任务

最后只需crontab -e,然后添加下面一行即可,设定为每天2:15执行。

15 2 * * * cd ~ && ./restart.sh