重新启动崩溃的屏幕
Restart a crashed screen
我有一个简单的 bash 脚本,它使用 inotifywait 命令并根据所做的修改,它 运行 一个 rsync 命令。这是在无限循环中完成的。
该脚本 运行 在“屏幕”会话中,但不幸的是它时常崩溃(没有错误说明原因)。
我一直在寻找一种方法来“监控”特定 screen/script 并在它崩溃时重新启动它,但我正在努力寻找解决方案。
脚本是运行“屏幕-AmdS脚本./script.sh”。
脚本示例:
#!/usr/bin/bash
while inotifywait --exclude "(.log)" -r -e modify,create,delete /home/backups/
do
rsync -avz -e --update --rsh='ssh -pxxxxx' /home/backups/* user@target:/location/ --delete --force
done
所以我的问题基本上是,有没有办法监控 'screen' 会话,如果它停止启动一个新会话,或者是否有另一种方法来保持这个脚本 运行ning 不断并且重新启动它(可能不使用屏幕)。
编辑:尝试更清楚
你可以发出
until ./script.sh ; do echo crashed ; sleep 1 ; done
在您的终端中。这将在脚本以非零结果退出时重新启动脚本。
您可以循环重新运行失败的脚本,直到成功。你可以用
来做到这一点
screen -AmdS script bash -c 'until ./script.sh; do echo "Crashed with exit code $?. Restaring."; sleep 1; done'
每次您的脚本失败时,这将打印您的脚本崩溃以及它有什么退出代码,暂停 1 秒,然后重新运行您的脚本。一旦您的脚本成功(即 ./script.sh
以非零退出代码终止),循环就会终止。
请注意,如果您的脚本永远不会成功,则这是一个无限循环。
我有一个简单的 bash 脚本,它使用 inotifywait 命令并根据所做的修改,它 运行 一个 rsync 命令。这是在无限循环中完成的。
该脚本 运行 在“屏幕”会话中,但不幸的是它时常崩溃(没有错误说明原因)。
我一直在寻找一种方法来“监控”特定 screen/script 并在它崩溃时重新启动它,但我正在努力寻找解决方案。
脚本是运行“屏幕-AmdS脚本./script.sh”。
脚本示例:
#!/usr/bin/bash
while inotifywait --exclude "(.log)" -r -e modify,create,delete /home/backups/
do
rsync -avz -e --update --rsh='ssh -pxxxxx' /home/backups/* user@target:/location/ --delete --force
done
所以我的问题基本上是,有没有办法监控 'screen' 会话,如果它停止启动一个新会话,或者是否有另一种方法来保持这个脚本 运行ning 不断并且重新启动它(可能不使用屏幕)。
编辑:尝试更清楚
你可以发出
until ./script.sh ; do echo crashed ; sleep 1 ; done
在您的终端中。这将在脚本以非零结果退出时重新启动脚本。
您可以循环重新运行失败的脚本,直到成功。你可以用
来做到这一点screen -AmdS script bash -c 'until ./script.sh; do echo "Crashed with exit code $?. Restaring."; sleep 1; done'
每次您的脚本失败时,这将打印您的脚本崩溃以及它有什么退出代码,暂停 1 秒,然后重新运行您的脚本。一旦您的脚本成功(即 ./script.sh
以非零退出代码终止),循环就会终止。
请注意,如果您的脚本永远不会成功,则这是一个无限循环。