如何使用 bash 脚本检查主管进程是 运行 还是已停止
How to check if supervisor process is running or stopped using bash script
我 运行 多个主管进程有时由于服务器过载某些进程 无限期停止 直到您手动重新启动它们。有没有一种方法可以编写一个 bash 脚本,该脚本可以由 crontab 定期执行以检查已停止的进程并重新启动它。
这就是我如何在终端上检查状态、停止或重新启动进程的方法
root@cloud:~# supervisorctl status birthday-sms:birthday-sms_00
birthday-sms:birthday-sms_00 RUNNING pid 2696895, uptime 0:02:08
root@cloud:~# supervisorctl stop birthday-sms:birthday-sms_00
birthday-sms:birthday-sms_00: stopped
root@cloud:~# supervisorctl status birthday-sms:birthday-sms_00
birthday-sms:birthday-sms_00 STOPPED May 07 11:07 AM
我不想使用 crontab 以特定时间间隔重新启动所有进程*/5 * * * * /usr/bin/supervisorctl restart all
,但我只想检查并重新启动已停止的进程
首先制作并测试一个没有 crontab 的脚本来执行您想要的操作。
当脚本运行时,检查它是否仍然在没有 .bashrc
中的设置的情况下运行,例如 supervisorctl
的路径。
还要检查您的脚本是否没有写入标准输出,也许引入一个日志文件。
接下来将脚本添加到crontab。
#!/bin/bash
for proc in 'birthday-sms:birthday-sms_00' 'process2' 'process3'; do
# Only during development, you don't want output from cron
echo "Checking ${proc}"
status=$(supervisorctl status "${proc}" 2>&1)
echo "$status"
if [[ "$status" == *STOPPED* ]]; then
echo "Restarting ${proc}"
supervisorctl restart "${proc}"
fi
done
或使用数组和更短的测试
#!/bin/bash
processes=('birthday-sms:birthday-sms_00' 'process2' 'process3')
for proc in ${processes[@]}; do
supervisorctl status "${proc}" 2>&1 |
grep -q STOPPED &&
supervisorctl restart "${proc}"
done
我 运行 多个主管进程有时由于服务器过载某些进程 无限期停止 直到您手动重新启动它们。有没有一种方法可以编写一个 bash 脚本,该脚本可以由 crontab 定期执行以检查已停止的进程并重新启动它。
这就是我如何在终端上检查状态、停止或重新启动进程的方法
root@cloud:~# supervisorctl status birthday-sms:birthday-sms_00
birthday-sms:birthday-sms_00 RUNNING pid 2696895, uptime 0:02:08
root@cloud:~# supervisorctl stop birthday-sms:birthday-sms_00
birthday-sms:birthday-sms_00: stopped
root@cloud:~# supervisorctl status birthday-sms:birthday-sms_00
birthday-sms:birthday-sms_00 STOPPED May 07 11:07 AM
我不想使用 crontab 以特定时间间隔重新启动所有进程*/5 * * * * /usr/bin/supervisorctl restart all
,但我只想检查并重新启动已停止的进程
首先制作并测试一个没有 crontab 的脚本来执行您想要的操作。
当脚本运行时,检查它是否仍然在没有 .bashrc
中的设置的情况下运行,例如 supervisorctl
的路径。
还要检查您的脚本是否没有写入标准输出,也许引入一个日志文件。
接下来将脚本添加到crontab。
#!/bin/bash
for proc in 'birthday-sms:birthday-sms_00' 'process2' 'process3'; do
# Only during development, you don't want output from cron
echo "Checking ${proc}"
status=$(supervisorctl status "${proc}" 2>&1)
echo "$status"
if [[ "$status" == *STOPPED* ]]; then
echo "Restarting ${proc}"
supervisorctl restart "${proc}"
fi
done
或使用数组和更短的测试
#!/bin/bash
processes=('birthday-sms:birthday-sms_00' 'process2' 'process3')
for proc in ${processes[@]}; do
supervisorctl status "${proc}" 2>&1 |
grep -q STOPPED &&
supervisorctl restart "${proc}"
done