Linux CRON Best Practice

本文介绍了一种利用Cron和Shell脚本实现Node.js应用自动重启的方法,通过定期检查进程状态来确保应用稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

手头有个Node.js的web应用,host在linux主机上。刚开发完遇到个小问题,系统bug比较多经常不经意间操作,整个应该就crash了,还得手动重新启动node应用。当然这主要原因是我们的错误处理机制没完善,这事接下来的任务,当务之急是想写个小程序检测node应用,发现crash立马再次重启应用。这样给用户的体验会好些。


立马想到了Linux下单Cron,类似windows下面的task scheduler都是定时运行指定的程序。

配置

Cron使用Crontab来进行配置

crontab -l   显示当前用户的配置
crontab -e 修改当前用户的配置
crontab -r  删除配置
crontab -u 指定用户


格式

配置文件的格式如下:

*    *    *    *    *  command to be executed
┬    ┬    ┬    ┬    ┬
│    │    │    │    │
│    │    │    │    │
│    │    │    │    └───── day of week (0 - 6) (0 is Sunday, or use names)
│    │    │    └────────── month (1 - 12)
│    │    └─────────────── day of month (1 - 31)
│    └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)

这里有一些预定义的值方便使用:
Entry Description Equivalent To
@yearly (or @annually)Run once a year, midnight, Jan. 1st0 0 1 1 *
@monthlyRun once a month, midnight, first of month0 0 1 * *
@weeklyRun once a week, midnight on Sunday0 0 * * 0
@dailyRun once a day, midnight0 0 * * *
@hourlyRun once an hour, beginning of hour0 * * * *
@rebootRun at startup@reboot


实例

crontab配置文件例子

进入编辑模式,crontab -e

加入如下语句:

*/1  *  *  *  *   /home/scripts/watchdog.sh >> /home/log/node.log


含义解释

每分钟运行watchdog脚本并把执行log输出到文件。


脚本内容

#!/bin/bash

content=$(ps -A | grep node)


if [ -z "$content" ]; then
  echo "there is no Node process running, create it again."
  exec /usr/local/bin/node /home/projects/pms/src/adv_pms/app.js >> /var/log/adv_pms.sys.log 2>&1

fi

检测node进程,如果程序crash进程号就没了为空, 然后重启node应用。

脚本完成,加上之前更改的crontab配置文件,没分钟检测node进程PID,如果没有了就立即重启!


注意事项

难者不会会者不难,就这简单的脚本折腾我半天,主要原因是对cron不太熟悉,开始我尝试写一个python的小程序,但用crontab调用会出问题,最后证明python里面的一些环境变量cron里面是没有的。就是说,程序在当前用户的环境里能运行,但在cron里面就有可能不行,这里一定要注意crontab里面的环境变量问题,尽量都使用绝对路径!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值