Выводит ли upstart весь корпус сценария в оболочку для выполнения или по очереди?

Моя стартовая работа не работает в предварительном запуске, когда она перемещает любой предыдущий файл журнала в резервную копию:

pre-start script
  mv -f $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.bak
  touch $LOGDIR/$LOGFILE
end script

Я ожидаю, что mv завершится с ошибкой, если предыдущий файл журнала не существует, поэтому добавили touch, чтобы последняя команда в корпусе скрипта вернула 0.

Однако, если скрипт запускается, когда в каталоге журнала нет предыдущего файла журнала, он не работает в предварительном запуске :

Jan  9 17:21:14 ip-172-30-1-54 kernel: [  250.154908] init: myscript state changed from starting to security
Jan  9 17:21:14 ip-172-30-1-54 kernel: [  250.154951] init: myscript state changed from security to pre-start
Jan  9 17:21:14 ip-172-30-1-54 kernel: [  250.155652] init: myscript pre-start process (1425)
Jan  9 17:21:14 ip-172-30-1-54 kernel: [  250.157167] init: myscript pre-start process (1425) terminated with status 1
Jan  9 17:21:14 ip-172-30-1-54 kernel: [  250.157280] init: myscript goal changed from start to stop

Если я снова запустил сценарий, он успешно запускается с предварительным запуском и в основной корпус сценария:

Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.444327] init: myscript state changed from starting to security
Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.444371] init: myscript state changed from security to pre-start
Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.445359] init: myscript pre-start process (1431)
Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.447203] init: myscript pre-start process (1431) exited normally
Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.447249] init: myscript state changed from pre-start to spawned
Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.447874] init: myscript main process (1434)
Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.447896] init: myscript state changed from spawned to post-start
Jan  9 17:21:29 ip-172-30-1-54 kernel: [  265.447972] init: myscript state changed from post-start to running

Из этого поведения я вызывая, что тело сценария выполняется по одной строке за раз, и любой отказ завершает сценарий (как make). Документация директивы script не дает никаких указаний:

Позволяет выполнить спецификацию многострочного блока кода оболочки. Блок завершается концевым скриптом.

Может ли кто-либо подтвердить или опровергнуть мою веру? Если это подтвердится, я могу просто запустить автономный сценарий оболочки с exec. Если это отрицается, мне нужно искать в другом месте мою проблему.

1
задан 9 January 2015 в 21:37

0 ответов

Другие вопросы по тегам:

Похожие вопросы: