Bash:检查,如果没有运行则运行进程

Paw*_*wan 6 bash

Bash:检查,如果没有运行则运行进程

嗨,我的要求是,如果Memcache服务器因生产中的任何原因而关闭,我想立即重新启动它

通常情况下,我将以这种方式启动Memcache服务器,用户无需复制,如下所示

memcached -u nobody -l 192.168.1.1 -m 2076 -x 192.168.1.2 -v

所以为此,我以这种方式在crontab中添加了一个条目

(crontab -e)

*/5 * * * * /home/memcached/memcached_autostart.sh
Run Code Online (Sandbox Code Playgroud)

memcached_autostart.sh

#!/bin/bash
ps -eaf | grep 11211 | grep memcached
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
memcached -u nobody -l 192.168.1.1 -m 2076 -x 192.168.1.2 -v
else
echo "eq 0 - memcache running - do nothing"
fi
Run Code Online (Sandbox Code Playgroud)

我的问题是在memcached_autostart.sh里面,为了自动启动memcached服务器,上面的脚本有什么问题吗?

要么

如果有更好的方法来实现这一目标(而不是使用cron作业) 请分享您的经验.

Som*_*ude 5

cron您可能想要创建一个适当的 init 脚本,而不是从它运行它。参见/etc/init.d/示例。此外,如果您这样做,大多数系统已经具有处理大部分工作的功能,例如检查启动、重新启动、停止、检查已经运行的进程等。

大多数守护程序脚本将 pid 保存到一个特殊文件(例如/var/run/foo),然后您可以检查该文件是否存在。

对于 Ubuntu,您可以查看/etc/init.d/skeleton可以复制的示例脚本。


Sad*_*ida 5

是的,问题是ps -eaf | grep 11211 | grep memcached我假设进程 ID 在每次启动时总是会改变,所以你应该做的是ps -ef | grep memcached

希望有所帮助

  • 那不是总是返回 return 0 因为它总是会找到 grep 命令吗? (2认同)
  • 事实上,上面的命令总是找到 grep 命令。可以使用以下命令排除 grep 进程:“ps -ef | grep memcache | grep -v grep”。如果进程没有运行,后一个命令将返回 false,如果正在运行,则返回 true (2认同)