Mas_Tan

Site blog for Tan

No Praise For Colorful


Welcome To My Blog

Crontab 定时任务,维护进程


在服务器上跑一个进程,不过几天后可能会突然挂掉,可能是 RAM 不够等原因,具体还要排查。。。

于是就想写一个定时任务,每分钟检查这个进程还在不在,如果已经挂掉的话,就重新启动.

Crontab

crontab 是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。是一个周期性运行的命令,在约定的时间执行已经计划好的工作.

cron 定时规则

包含以下几个参数 m h dom mon dow command

m(分钟) h(小时) dom(日期) mon(月份) dow(星期) command(命令) 解释
* * * * * /home/start.sh 每分钟执行 start.sh
*/3 * * * * /home/start.sh 每3分钟执行 start.sh
3 * * * * /home/start.sh 每小时第3分钟执行 start.sh
3,10 * * * * /home/start.sh 每小时第3分钟,第10分钟执行 start.sh
3 10 * * * /home/start.sh 每天10:03执行 start.sh
3 10 * * 1 /home/start.sh 每个周一的10:03执行 start.sh
* 1 * * * /home/start.sh 从01:00到01:59 每隔1分钟 执行
0 */1 * * * /home/start.sh 每个小时的 0 分执行
0 * * * * /home/start.sh 每个小时的 0 分执行,同上
1 8-14/2 * * * /home/start.sh 每天 8:01,10:01,12:01,14:01 执行
3 3 3 * * /home/start.sh 每个月的 3号03:03 执行

编辑配置文件

crontab -e

我的需求是每3分钟跑一下脚本,在最后添加一行

*/3 * * * * /home/startETH.sh

保存退出

不出意外,startETH.sh 会在3分钟后执行。


startETH.sh 文件中判断也很简单

#! /bin/bash
# 查看是否存在 geth 进程
PROCESS_NUM=`ps -fe |grep "geth" | grep -v "grep" | wc -l`
if [ $PROCESS_NUM -eq 0 ];
then
echo "Geth has shutdown"
echo "Restarting ...."
# 重新启动
nohup geth --datadir /home/ethereum --cache 1024 --rpc --rpcaddr "0.0.0.0" --rpcport "8545" --rpcapi "db,eth,net,web3,personal" 2>> ./logs/geth_network.log &
echo "Started success"
fi

OK, 利用 Cron 实现还是蛮方便的,或者直接写一个死循环也可以的~

最近的文章

区块链-侧链

什么是侧链?侧链,简单的说,就是一种使货币在两条区块链间移动的机制应用场景 用户Alice, 在xxx链上有一个币,可以兑换到yyy链上总价值等量的三个币 Alice在yyy链上的三个币,又可以兑换回xxx链上的一个币。实现双向挂钩 侧链协议的设计难点在于如何让资产在主链和侧链之间安全流转。简而言之,接受资产的链必须确保发送资产的链上的币被可靠锁定。具体,协议采用双向挂钩机制实现比特币向侧链转移和返回。主链和侧链需要对对方的特定交易做 SPV 验证。完整过程如下: 当用户要向侧链转...…

继续阅读
更早的文章

C++ 面试

layout: posttitle: C++ 面试date: 2018-07-14 15:59:28.000000000 +09:00—为什么C++的 member function template不能是virtual的 ? 一个类的成员函数不能既是 template 又是 virtual 的class Animal{ public: template<typename T> virtual void make_sound(){ //.....…

继续阅读