Я вижу проблему в выскочке, где использование подстановки команд внутри строки сценария после запуска вызывает ошибку (отчеты syslog «завершены статусом 1»,), но только во время первоначального запуска системы.Upstart: ошибка при использовании подстановки в пост-старт-скриптовой строфе во время последовательности запуска
Я пробовал использовать почти каждый крюк события запуска под солнцем. локальные файловые системы и net-device-up работали без ошибок около 1/100 попыток, поэтому он выглядит как состояние гонки. Он отлично работает при ручном запуске/остановке. Подстановочные замены команд, которые я видел, запускают ошибку, являются простой кошкой или датой, и я попытался использовать метод $() и обратный путь. Я также пытался использовать сон в предварительном начале, чтобы победить в гонке, но ничего не сделал.
Я запускаю Ubuntu 11.10 на VMWare с хостом Win7. Прошло слишком много часов, чтобы устранить эту проблему уже ... У кого-нибудь есть идеи?
Вот мой файл .conf для справки:
start on runlevel [2345]
stop on runlevel [016]
env NODE_ENV=production
env MYAPP_PIDFILE=/var/run/myapp.pid
respawn
exec start-stop-daemon --start --make-pidfile --pidfile $MYAPP_PIDFILE --chuid node-svc --exec /usr/local/n/versions/0.6.14/bin/node /opt/myapp/live/app.js >> /var/log/myapp/audit.node.log 2>&1
post-start script
MYAPP_PID=`cat $MYAPP_PIDFILE`
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] + Started $UPSTART_JOB [$MYAPP_PID]: PROCESS=$PROCESS UPSTART_EVENTS=$UPSTART_EVENTS" >> /var/log/myapp/audit.upstart.log
end script
post-stop script
MYAPP_PID=`cat $MYAPP_PIDFILE`
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] - Stopped $UPSTART_JOB [$MYAPP_PID]: PROCESS=$PROCESS UPSTART_STOP_EVENTS=$UPSTART_STOP_EVENTS EXIT_SIGNAL=$EXIT_SIGNAL EXIT_STATUS=$EXIT_STATUS" >> /var/log/myapp/audit.upstart.log
end script
Вам не нужна замена команд здесь, 'date' может печатать вещи просто отлично. 'date -u +" [% Y-% M-% Dt% t.3NZ] - начато $ UPSTART_JOB [$ MYAPP_PID]: PROCESS = $ PROCESS UPSTART_EVENTS = $ UPSTART_EVENTS ">>/var/log/myapp/audit.upstart .log' ... при условии, что ваши переменные не содержат каких-либо последствий, которые должны быть экранированы. – tripleee
Правда, я могу избежать подстановки команды для даты, но не для кота, насколько я знаю. Если бы я мог найти способ получить этот PID в записи журнала без подстановки команды, то ваше право сказать, что я мог бы обойти всю проблему. – Egg