shell脚本-满足服务器重启后后台nohup进程重新继续运行

本文介绍了在服务器重启后nohup后台进程不再自动启动的原因,如进程被清空和缺乏启动脚本,提供了通过编写shell脚本和使用crontab进行定时任务来解决的方法,以及处理编码问题和赋予脚本执行权限的步骤。
摘要由CSDN通过智能技术生成

**问题:**在服务器重启后,nohup 后台进程不会自动重启

原因可能有以下几点:

服务器重启清空进程: 当服务器重启时,通常会清空之前运行的所有进程,包括使用 nohup 后台运行的进程。这是因为系统重新启动时,会重新初始化进程表,之前的进程状态将会被清空。
没有自动启动脚本: nohup 后台运行的进程通常需要一个启动脚本或者类似的机制来在系统重启后自动启动。如果没有设置相关的自动启动机制,进程就无法在服务器重启后自动重新启动。

解决思路:采用crontab监控后台定时任务的执行

1.写一段.shell脚本,去执行nohup后台进程;
2.采用crontab定时任务去拉.sh脚本。

一、shell脚本编写

#!/bin/bash
#上面这一行不能删除,#!/bin/bash 表示使用 Bash 解释器来执行脚本。Bash(Bourne Again SHell)是一个常见的 Unix/Linux shell,用于执行命令和脚本。总的来说,#!/bin/bash 让脚本更加自包含和可执行,使得脚本的运行环境不依赖于用户手动指定解释器。

# 定义要运行的nohup命令
NOHUP_COMMAND="nohup python //home/g6/JPGEncode/PicTOtxt.py >>./1.log 2>&1 &"

# 定义要检查的进程名称,检索的作用
PROCESS_NAME="PicTOtxt.py"

# 检查进程是否存在的函数
check_process() {
    local process_count=$(ps aux | grep -v grep | grep "$PROCESS_NAME" | wc -l)
    echo $process_count
}

# 主逻辑
main() {
    process_count=$(check_process)

    if [ $process_count -eq 0 ]; then
        echo "Process '$PROCESS_NAME' is not running. Restarting..."
        eval $NOHUP_COMMAND
        echo "Process restarted successfully."
    else
        echo "Process '$PROCESS_NAME' is already running."
    fi
}

# 执行主逻辑
main

将上述代码放到一个已经可以执行的.sh文件中。放到装置上相应的位置/home/g6/WatchDog/WatchDog.sh。利用阿里云作为中介,将代码放到阿里云上之后转到装置上。

这里最好的方法是将上述代码放到一个已经可以执行的.sh文件中,如果没有.sh文件就用下述方法。但是会报错,需要修改错误
将上述代码放到一个txt文件中或者一个Notepad中,并手动修改文件名并将文件名改为.sh后缀,例如WathDog.sh。后面根据需求放到相应的位置上,我需要放到装置上,需要经过阿里云转一手。

#放到阿里云上,再转到监测装置上
#打开xshell链接到阿里云

cd /home/dlqx/WatchDog/

#将桌面上WathDog.sh拖上去 /home/dlqx/WatchDog/WatchDog.sh

#在装置上执行,这个代码是将整个文件夹传输,不用在装置上新建文件夹去接收了,传到//home/g6/下
scp -r root@47.102.47.6://home/dlqx/WatchDog/ //home/g6/

#赋权限

chmod 777 /home/g6/WatchDog/WatchDog.sh

附错误修改方法:
#这时如果报错,错误内容如下。错误原因为在win系统上编辑和在linux上编辑的编码不一样

-bash: /home/g6/WatchDog/WatchDog.sh: /bin/bash^M: bad interpreter: No such file or directory

#所以最好的方法是,用原来的.sh文件,把新编写的脚本给放进去
#执行以下代码修改错误,会重新建立一个文件用服务器系统匹配的格式放入上述的代码

tr -d '\r' < /home/g6/WatchDog/WatchDog.sh > /home/g6/WatchDog/WatchDog_fixed.sh
#删除原来的.sh文本,修改新生成的文本名
rm WatchDog.sh
mv WatchDog_fixed.sh WatchDog.sh
#现在可用的.sh文本名仍然是WatchDog.sh

二、确保脚本有执行权限,可以使用以下命令赋予执行权限:

chmod 777 WatchDog.sh

三、crontab定时任务。crontab是系统自带的定时器,系统重启之后它也会自动重启。所以可以用crontab来调用nohup后台进程

crontab -l

crontab 是用于编辑和管理用户的 cron 作业的命令,而 crontab -l 的作用是查看用户当前的 cron 作业列表。可能会看到类似以下的输出:

0 1 * * * /path/to/script.sh
*/15 * * * * /path/to/another_script.sh

上述例子表示两个不同的 cron 作业。第一个作业在每天的凌晨1点执行 /path/to/script.sh 脚本,而第二个作业在每15分钟执行 /path/to/another_script.sh 脚本。
在这里插入图片描述
可以移动光标,加入要执行的定时任务。例如这里加入一个每一分钟执行一次WatchDog.sh文件。
执行查看.py文件有没有被重启动。若有相应的进程,则表示执行了

ps -ef |grep .py

在这里插入图片描述
如果没有被执行,则尝试重启一下crontab
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值