我目前使用How do I write a bash script to restart a process if it dies? lhunath中描述的技术来重启死进程。
until myserver; do
echo "Server 'myserver' crashed with exit code $?. Respawning.." >&2
sleep 1
done
但我不想只是调用 myserver 进程,而是想调用这样的东西:
myserver 2>&1 | /usr/bin/logger -p local0.info &
如何在管道进程中使用第一种技术?
答案 0 :(得分:4)
until
循环本身可以通过管道传输到logger
:
until myserver 2>&1; do
echo "..."
sleep 1
done | /usr/bin/logger -p local0.info &
因为myserver
从循环(继承自shell)继承了它的标准输出和错误。
答案 1 :(得分:1)
您可以使用PIPESTATUS
变量从管道中的特定命令获取退出代码:
while :; do
myserver 2>&1 | /usr/bin/logger -p local0.info
if [[ ${PIPESTATUS[0]} != 0 ]]
then echo "Server 'myserver' crashed with exit code ${PIPESTATUS[0]}. Respawning.." >&2
sleep 1
else break
fi
done