Моя стартовая работа не работает в предварительном запуске, когда она перемещает любой предыдущий файл журнала в резервную копию:
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. Если это отрицается, мне нужно искать в другом месте мою проблему.