Linux下通过定时任务检测进程并重启
一、重启特定进程的脚本#! /bin/bashps -ef | grep "进程名字" | grep -v grep#如果进程搜索不出来,则$?的值为1,否则值为0#当$?值不等于0的时候,重新启动进程if [ $? -ne 0 ]thencd "进程所在目录" && "执行进程的语句"elseecho "running"fi二、将上述脚本设置为定时任务设置定时任务需要用到cron
·
一、重启特定进程的脚本
#! /bin/bash
ps -ef | grep "进程名字" | grep -v grep
#如果进程搜索不出来,则$?的值为1,否则值为0
#当$?值不等于0的时候,重新启动进程
if [ $? -ne 0 ]
then
cd "进程所在目录" && "执行进程的语句"
else
echo "running"
fi
二、将上述脚本设置为定时任务
设置定时任务需要用到crontab
crontab [-u username] //省略用户表表示操作当前用户的crontab
-e (编辑工作表)
-l (列出工作表里的命令)
-r (删除工作作)
用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。
crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有
- 取值范围内的所有数字
- / 每过多少个数字
- -从X到Z
- ,散列数字
每五分钟执行 */5 * * * *
每五小时执行 0 */5 * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
三、一些坑
-
crontab定时任务需要至少有能够执行crontab命令的权限。
可以是wheel用户组用户或者root用户组用户。普通用户好像没有执行定时任务的权限。 -
crontab定时执行脚本时,没有环境变量的支持
如果脚本中用到一些环境变量,需要将此环境变量在脚本中导入 -
crontab执行.sh后缀脚本
crontab -e而后编辑定时任务。
格式为 :
时间 命令
如果命令为执行.sh脚本,则应该这样写:/bin/sh 你的脚本位置的全路径(一定要全路径)
-
对脚本内容的要求
定向输入文件要写全路径名,
基本上所有的东西都要写全路径名。
除非导入了PATH环境变量。
四、一个例子
start.sh
if [ 1 -ne 2 ]
then
echo "不相等" >> /home/wat/test/log.txt
else
echo "相等" >> /home/wat/test/log.txt
fi
crontab -e
#开机自启动任务
@reboot /bin/sh /home/wat/test/start.sh
#每分钟执行一次start.sh脚本
* * * * * /bin/sh /home/wat/test/start.sh
在输出文件log.txt中,每过一分钟增加一条记录”不相等“
更多推荐
已为社区贡献1条内容
所有评论(0)