Я получил проблему с новомодными файлами Ubuntu в/etc/init/. Я пытаюсь выполнить процесс, если он уже не существует. Таким образом, я записал conf файл, и запустите с "запуска"
Следующие два файла - главным образом то же за исключением искавшего процесса. Процесс init в первом файле всегда находится, и несколько повторений "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
Для второго файла doesnotexist не найден 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
Проблема состоит в том, что разделы сценария в выскочке выполняются с набором-e флаг. Это означает оболочку с выходом если любые ошибки команды (как pgrep). Решение состоит в том, чтобы добавить || true
после команды pgrep.