Создать работу upstart точно так же в SystemD Ubuntu 16.04

Мы уже много лет выполняем стартовую работу в Ubuntu 14.04, и теперь мы собираемся перейти к новой версии Ubuntu, начиная с 16.04, но я не могу создать такую ​​же работу в systemD.

description  "evercam_media"
start on filesystem or runlevel [2345]
stop on runlevel [!2345]
limit nofile 1000000 1000000

respawn
chdir /
setuid root
setgid root

env HOME=/home/root
env LANG=en_US.UTF-8
env LANGUAGE=en_US:en
env LS_ALL=en_US.UTF-8
env ERL_MAX_PORTS=10240
env ERL_MAX_ETS_TABLES=5000
env PORT=4000
env MIX_ENV=prod


exec watch -n1 '/usr/local/bin/run_evercam_media.sh'

post-stop exec sudo pkill beam

Хотя я видел несколько работ других людей, я пробовал так много вещей, но он не запускает мое приложение, любая помощь будет высоко цениться, спасибо, извините за то, что меньше информации, я совсем новичок в этом роде.

Обновить:

[Unit]
Description=Runner for My Phoenix App
After=network.target

[Service]
WorkingDirectory=/etc/build/
EnvironmentFile=/etc/default/my_phoenix_app.env
ExecStart=/usr/local/bin/run_evercam_media.sh
ExecStop=sudp pkill beam
User=root
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

1 ответ

Ваш сервис не имеет типа.

Одна из основных вещей, которые должны быть указаны в [Service] раздел является Type= службы. Это классифицирует сервисы по их процессу и демонизирующему поведению. Это важно, потому что он сообщает systemd, как правильно управлять сервисом и выяснять его состояние.

Type= directive может быть одним из следующих:

simple: Основной процесс службы указан в стартовой строке. Это значение по умолчанию, если Type= а также Busname= директивы не установлены, но ExecStart= установлено. Любой обмен данными должен осуществляться вне устройства через второй модуль соответствующего типа (например, через модуль.socket, если этот модуль должен обмениваться данными с использованием разъемов).

forking: Этот тип службы используется, когда служба разветвляет дочерний процесс, почти сразу же покидая родительский процесс. Это говорит systemd, что процесс все еще выполняется, хотя родительский процесс завершен.

oneshot: Этот тип указывает, что процесс будет кратковременным и что systemd должен дождаться завершения процесса, прежде чем продолжить работу с другими модулями. Это по умолчанию Type= а также ExecStart= не установлены. Используется для разовых задач.

dbus: Это означает, что устройство будет иметь имя на шине D-Bus. Когда это произойдет, systemd продолжит обрабатывать следующий модуль.

notify: Это означает, что служба выдаст уведомление после завершения запуска. Процесс systemd будет ждать, пока это произойдет, прежде чем перейти к другим модулям.

idle Это означает, что служба не будет запущена, пока не будут отправлены все задания.

Из понимания системного блока Digital Ocean и файлов модулей

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