Linux下通过定时任务检测进程并重启

一、重启特定进程的脚本

#! /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 *

三、一些坑

  1. crontab定时任务需要至少有能够执行crontab命令的权限。
    可以是wheel用户组用户或者root用户组用户。普通用户好像没有执行定时任务的权限。

  2. crontab定时执行脚本时,没有环境变量的支持
    如果脚本中用到一些环境变量,需要将此环境变量在脚本中导入

  3. crontab执行.sh后缀脚本
    crontab -e而后编辑定时任务。
    格式为 :
    时间 命令
    如果命令为执行.sh脚本,则应该这样写:

    /bin/sh 你的脚本位置的全路径(一定要全路径)
    
  4. 对脚本内容的要求
    定向输入文件要写全路径名,
    基本上所有的东西都要写全路径名。
    除非导入了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中,每过一分钟增加一条记录”不相等“

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值