在 systemD ubuntu 16.04 中创建完全相同的 upstart 作业

在 systemD ubuntu 16.04 中创建完全相同的 upstart 作业

这么多年来,我们一直在 ubuntu 14.04 上运行 upstart 作业,现在我们即将转向新版本的 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=和指令,但设置了,则这是默认进程。任何通信都应通过适当类型的第二个单元在单元外部处理(例如,如果此单元必须使用套接字进行通信,则通过 .socket 单元处理)。Busname=ExecStart=

forking:当服务派生出子进程时使用此服务类型,几乎立即退出父进程。这告诉 systemd,即使父进程已退出,该进程仍在运行。

oneshot:此类型表示进程将短暂存在,systemd 应等待进程退出后再继续处理其他单元。这是默认设置Type=ExecStart=无需设置。它用于一次性任务。

dbus:这表示该单元将在 D-Bus 总线上取一个名称。发生这种情况时,systemd 将继续处理下一个单元。

notify:这表示服务启动完成后会发出通知。systemd 进程会等待此通知,然后再继续处理其他单元。

idle:这表示直到所有作业都调度完毕后,该服务才会运行。

来自 Digital Ocean 的了解 Systemd 单元和单元文件

相关内容