我看到 runit 出现一些意外行为,不知道如何让它做我想做的事情,而不会在终止期间引发错误。我有一个进程有时知道它应该停止自己而不是让自己重新启动(因此应该sv d
自己调用)。如果我从不更改用户,但如果我在运行时切换到非 root 用户会产生错误,则此方法有效。
我将对finish
这两个示例使用相同的脚本:
#!/bin/bash -e
echo "downtest finished with exit code $1 and exit status $2"
run
按预期工作的脚本(打印downtest finished with exit code 0 and exit status 0
到系统日志):
#!/bin/bash -e
exec 2>&1
echo "running downtest"
sv d downtest
exit 0
run
无法按预期工作的脚本(打印downtest finished with exit code -1 and exit status 15
到系统日志):
#!/bin/bash -e
exec 2>&1
echo "running downtest"
chpst -u ubuntu sudo sv d downtest
exit 0
如果我使用su ubuntu
而不是chpst
.
关于我为什么看到这种行为以及如何修复它的任何想法,以便调用sudo sv d downtest
导致干净的进程退出而不是返回错误状态代码?