Назад | Перейти на главную страницу

Задание Ubuntu Upstart - команда «стоп» не распознается

Мне нужна помощь с этим; бесконечный на бесконечный взгляд сценариев именно то же самое - но я не могу остановить работу, связанную со сценарием выскочки. Я использую любой из новейших образов Ubuntu Elestic AMI на EC2, и это происходит от микро до больших экземпляров.

Сначала передаю простую конфигурацию в /etc/init/node-monitor.conf чтобы начать процесс:

description "node-monitor"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &"

Это сработало для запуска:

sudo start node-monitor
node-monitor start/running, process 1580

Но не останавливаясь:

sudo stop node-monitor
stop: Unknown instance: 

Затем я попробовал что-то более сложное, основанное на другом проекте node.js:

description "node-monitor"
start on (local-filesystems and net-device-up IFACE=eth0)
stop on shutdown
script
echo $$ > /var/run/node-monitor.pid
exec sudo -u root sh -c "cd /home/ubuntu/node-monitor/run && /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1 &"
end script
pre-stop script
rm /var/run/node-monitor.pid
end script

Но и это не сработало. Что в Сэме Хилле я делаю не так?

Итак, во-первых, выскочка бежит все jobs как root, поэтому вам не нужно sudo, избавьтесь от этого.

Во-вторых, может показаться, что ваша отслеживаемая программа завершается, отсюда и ошибка «неизвестный экземпляр». Вы должны получить что-то в / var / log / syslog, сообщающее вам, что процесс завершился. Вы можете добавить слово «респаун», и выскочка попытается запустить его снова, но если он продолжит быстро выходить, выскочка в конце концов сдастся.

Вы заканчиваете строку символом &, что означает «запускать это в фоновом режиме». Учитывая это, выскочка увидит, что ваша оболочка завершилась (поскольку управление заданиями неактивно в неинтерактивной оболочке, & будет эффективно демонизировать любые задания). Если вы хотите, чтобы выскочка продолжала работу этого процесса и могла его убить, отбросьте &.

Кроме того, ваше начало слишком явное, а ваша остановка основана на несуществующем событии. Вы можете просто начать на уровне выполнения [2345] и остановиться на уровне выполнения [^ 2345], и это поможет вашей работе лучше работать в более поздних выпусках по мере развития Ubuntu. Начиная с Ubuntu 11.10, это также означает, что он начнется после все сетевые интерфейсы работают, а не только eth0.

Еще интереснее то, что вы можете использовать строфу chdir, поэтому вам совсем не нужно использовать оболочку.

Итак, исходное задание лучше всего записать как:

start on runlevel [2345]
stop on runlevel [^2345]

respawn
chdir /home/ubuntu/node-monitor/run
exec /usr/local/bin/node client.js ec2=true debug=false console=true cloudwatch=true >> /var/log/node-monitor.log 2>&1

Для получения бонусных баллов, когда выйдет Ubuntu 12.04, вы можете использовать новую функцию журнала консоли и удалить >> /var/log/node-monitor.log, хотя он будет писать в / var / log / upstart / node -monitor.log вместо этого.

И, наконец, настоящих «алестических» AMI больше нет. Эрик Хаммонд ведет таблицу тех же идентификаторов AMI, которые перечислены на https://cloud-images.ubuntu.com.. сравнить http://alestic.com к http://cloud-images.ubuntu.com/query/lucid/server/released.current.txt например.