诉求
在服务器上跑了一个服务,需要24小时不间断运行。
如果你是root或所在用户已加入sudoer那么参考Linux添加自启动daemon service
若所在用户没有root权限无法向系统写入service实现daemon接着往下看
分析
普通用户仍然具有创建计划任务的权限
可以通过crontab设置每分钟运行脚本检查进程是否存活
实现
首先创建守护脚本
$ vi ~/crash_monitor.sh
#!/bin/bash
if test $(pgrep gogs|wc -l) -eq 0
then
nohup /home/git/gogs/gogs web > /dev/null 2>&1 &
fi
# 保存退出并赋予执行权限
$ chmod +x ~/crash_monitor.sh
上述脚本将检查是否存在gogs进程,不存在则后台执行gogs
有关nohup可以参考之前的文章同为后台运行screen, nohup和start-stop-daemon到底有什么区别?
接着添加crontab计划任务
$ crontab -e
# 末尾加入以下内容
* * * * * /home/git/crash_monitor.sh
上述配置代表每分钟执行一次
拓展
crontab语法详解,前五位分别为时间参数
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 7) (星期天为0或7)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
第六位至行尾均视为命令,举例:
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# m h dom mon dow command
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
综上crontab支持的最高任务频率为每分钟一次
当然也可以通过奇技淫巧实现更高频率,例如:
# Run your command every 10sec
* * * * * /home/you/task.sh
* * * * * sleep 10;/home/you/task.sh
* * * * * sleep 20;/home/you/task.sh
* * * * * sleep 30;/home/you/task.sh
* * * * * sleep 40;/home/you/task.sh
* * * * * sleep 50;/home/you/task.sh
注:生产环境不建议这么做,老老实实用daemon service配置重启间隔吧。
参考
unix - How can I schedule a cron job that runs every 10 seconds in linux? - Server Fault