linux serverscript.sh 为真;做,但 sleep 然后重新检查 true

标签 linux bash

有人向我推荐了这个 ServerRestart.sh 以在出现严重故障时重启我的游戏服务器。

while true; do
    LD_LIBRARY_PATH=lib ./Server
done

我用这个“改进”了它以在每次重启时删除日志目录。

while true; do
    rm -r /home/_jc3105/logs
    LD_LIBRARY_PATH=lib ./Server
done

如果您在运行时删除日志目录,此特定服务器将重新启动。我的改进导致它有时会双重重启 所以我认为这是解决方案。

while true; do
    sleep 4
    rm -r /home/_jc3105/logs
    LD_LIBRARY_PATH=lib ./Server
done

但我怀疑它还会有一个新问题。有时它会在一瞬间错误地认为服务器需要重新启动,而实际上不需要重新启动,这在我引入文件夹删除之前不是问题。如果被触发,将导致服务器因删除日志文件而重新启动。

我想使用 script.sh 自动重启游戏服务器。我希望它先等待。然后复查真假?条件。

最佳答案

如果服务器 fork 并继续在后台运行,您的 while 循环将在服务器启动后立即运行另一次迭代。您希望避免杀死运行正常的服务器。

while true; do
    if ! pidof Server; then
        rm -r /home/_jc3105/logs
        LD_LIBRARY_PATH=lib ./Server
    fi
    sleep 5
done

如果服务器没有在 ps 列表中显示为 Server,显然您需要将参数调整为 pidof .

删除日志后无需 sleep rm 将删除文件,此操作在 rm 完成时完成。我放入的另一个 sleep 只是为了避免在自旋锁中执行此操作(每秒数千次)。

关于linux serverscript.sh 为真;做,但 sleep 然后重新检查 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47527432/

相关文章:

linux - 是否可以运行 BSD userland 来替代带有 linux 内核的 GNU coreutils?

linux - Linux内核中virt_to_phys和CPU的MMU是什么关系?

perl - 在脚本中更改工作目录的最佳做法是什么?

linux - 在 vim 中执行打开默认编辑器命令

python - 通过正则表达式批量重命名 - python 解决方法

linux - WHILE循环不循环

Python3 GTK3 - 单击后立即将按钮更改为不敏感

linux - 脚本内 SSH 命令中的变量

c - 无法正确解释 c 程序中 system() 的返回值

bash - 转义 bash 变量中的特殊字符