我在 /etc/init/ 中遇到了 Ubuntu upstart 文件的问题。我尝试运行一个不存在的进程。所以我写了一个 conf 文件,并以“start”启动
以下两个文件除了被搜索的进程外,大部分内容相同。在里面总是会找到第一个文件中的一个进程,结果就是将一些重复的“1 2 4”输出到 $TMPFILE 中。
start on filesystem and net-device-up IFACE!=lo
stop on runlevel [016]
respawn
script
TMPFILE=/var/log/tmp.log
echo 1 >> $TMPFILE
PID=$(pgrep -f "init" -o)
echo 2 >> $TMPFILE
if [ -z $PID ] ; then
echo 3 >> $TMPFILE
fi
echo 4 >> $TMPFILE
end script
对于第二个文件,不存在pgrep 未找到。但是,只有“1”的重复项会输出到 $TMPFILE。我还尝试单独运行脚本部分,结果正如预期的那样输出“1 2 3 4”。
start on filesystem and net-device-up IFACE!=lo
stop on runlevel [016]
respawn
script
TMPFILE=/var/log/tmp.log
echo 1 >> $TMPFILE
PID=$(pgrep -f "doesnotexist" -o)
echo 2 >> $TMPFILE
if [ -z $PID ] ; then
echo 3 >> $TMPFILE
fi
echo 4 >> $TMPFILE
end script
- 这是怎么发生的?upstart 是否收到了程序包作为例外?
- 我该如何修复此问题?
- 为什么输出会重复几次而不是一次?输出不会无限增长,而且看起来也不像是重新生成。
答案1
问题是 upstart 中的脚本部分使用 set -e 标志运行。这意味着如果任何命令出错(如 pgrep),shell 就会退出。解决方案是|| true
在 pgrep 命令后添加一个。