岚天逸见

一键自动往crontab添加条目脚本

脚本的优点:

只要将 监控脚本 被监控程序 和重启脚本放在同一个目录下,并将被监控程序运行起来,即可自动添加到crontab中,建议配置mooon提供的process_monitor.sh一起使用。


#!/bin/sh
# writed by yijian on 2013/1/19
# generic script used to install an iterm into crontab

# http://code.google.com/p/mooon/source/browse/trunk/common_library/shell/install_crontab.sh


# $monitor_name used to monitor the process named by $process_name,
# if $process_name is hangup, $monitor_name will reboot it by $start_name.
# before using $monitor_name, $process_name should be running,
# the installation will get the path information automatically.
# **PLEASE NOTE**: all files must be placed in the same directory.
process_name=$1    # the fullname of process monitored (but not included directory)
monitor_name=$2    # the path of monitor script (maybe included directory)
start_name=$3      # the path of start script (maybe included directory)
timedate_fields=$4 # five time and date fields
me=`whoami`


# check cmdline
if test $# -ne 4; then
echo "usage: process_name monitor_name start_name time_date"
echo "EXAMPLE1: $0 mooon process_monitor.sh start_test.sh \"* * * * *\""
echo "EXAMPLE2: $0 mooon /tmp/process_monitor.sh /tmp/start_test.sh \"* * * * *\""
echo "monitor_name or start_name must be in the same directory with process_name, "
echo "if monitor_name or start_name don't include directory"
exit 1
fi


# get pid & username
eval $(ps -C $process_name h -o pid,euser | awk -F" " '{ printf("pid=%s\nuser=%s\n",$1,$2); }')
if test $? -ne 0; then
echo "$process_name NOT RUNNING now"
exit 1
fi


if test "X$me" != "X$user"; then
echo "$process_name NOT RUNNING now"
exit 1
fi


# get file path
filepath=`readlink /proc/$pid/exe`
if test $? -ne 0; then
exit 1
fi


# get directory path
binpath=`dirname $filepath`


# check files
if test -x $monitor_name; then
monitor_path=$monitor_name
else
monitor_path=$binpath/$monitor_name
fi
if test -x $start_name; then
start_path=$start_name
else
start_path=$binpath/$start_name
fi


if test ! -x $monitor_path; then
echo "$monitor_path not exist"
exit 1
fi
if test ! -x $start_path; then
echo "$start_path not exist"
exit 1
fi


# install crontab if not exist
crontab -l | grep "$start_path" > /dev/null 2>&1
if test $? -ne 0; then
crontab -l > crontab.tmp
echo -e "\n# the following monitor added by `basename $0`($process_name) on `date +"%Y-%m-%d %H:%M:%S"`" >> crontab.tmp
echo "$timedate_fields $monitor_path $process_name $start_path" >> crontab.tmp
crontab crontab.tmp
if test $? -ne 0; then
exit 1
fi


rm crontab.tmp
fi


exit 0

posted on   岚天逸见  阅读(629)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义

导航

统计信息

点击右上角即可分享
微信分享提示