Создать работу 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 и файлов модулей