Выполняется следующий сценарий Upstart, сохраненный как /etc/init/upstart-test.conf:
start on filesystem
stop on on runlevel [!2345]
pre-start script
set -x
[ ! -f /etc/default/grub ] && { stop; exit 0; }
. /etc/default/grub
# [ ! -f /etc/default/grub ] && { stop; exit 0; }
end script
script
set -x
. /etc/default/grub
true
end script
Запуск (в Ubuntu 14.04.5):
$ sudo initctl start upstart-test
upstart-test start/running, process 2380
Если я раскомментирую второй тест существования файла, задание не работает:
$ sudo initctl start upstart-test
initctl: Job failed to start
Почему? Журнал показывает:
$ sudo cat /var/log/upstart/upstart-test.log
+ [ ! -f /etc/default/grub ]
+ . /etc/default/grub
+ GRUB_DEFAULT=0
+ GRUB_TIMEOUT=0
+ GRUB_TIMEOUT_STYLE=hidden
+ GRUB_RECORDFAIL_TIMEOUT=0
+ lsb_release -i -s
+ GRUB_DISTRIBUTOR=Ubuntu
+ GRUB_CMDLINE_LINUX_DEFAULT=
+ GRUB_CMDLINE_LINUX=
+ GRUB_GFXMODE=auto
+ [ ! -f /etc/default/grub ]
Файл никогда не исчезает. Вторая тестовая строка файла идентична; Я даже пробовал копировать / вставлять его и печатать вручную вручную. Что происходит?