Ubuntu 18.04 中的 systemd 服务未调用自定义 sh 脚本

Ubuntu 18.04 中的 systemd 服务未调用自定义 sh 脚本

我正在尝试创建/运行一项服务,即使用 systemd 在启动时启动一个脚本。

首先,当我用测试我的脚本时$ /usr/bin/pastec.sh,它运行良好。

因此,我尝试创建我的服务:

$ sudo nano /etc/systemd/system/pastec.service

看起来像:

[Unit]
Description=Pastec Service

[Service]
ExecStart=/usr/bin/pastec.sh
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

然后,启动它:

systemctl daemon-reload
systemctl enable pastec.service
systemctl start pastec

代码执行,没有返回错误。

root# systemctl start pastec
root# 

但是当我运行时,服务/任务不存在ps aux | grep pastec

注意:我在 Ubuntu 14.04 上使用 init.d 在启动时运行此脚本 - 现在我想使用 systemd 在 Ubuntu 18.04 上运行它。

我错过了什么 ?

编辑 1:正如 PonJar 所询问的,这是我所看到的systemctl status pastec

● pastec.service - Pastec Service
   Loaded: loaded (/etc/systemd/system/pastec.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) since Wed 2019-10-02 06:01:07 UTC; 4s ago
  Process: 8339 ExecStart=/usr/bin/pastec.sh (code=exited, status=0/SUCCESS)
 Main PID: 8339 (code=exited, status=0/SUCCESS)

但是用 grep 找不到 pastec 的踪迹...

答案1

经过多次搜索,我找到了答案线

我添加了Type=forking服务指令并且该脚本确实由服务启动。

Main PID: 12645 (pastec)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/pastec.service
           └─12645 ./pastec visualWordsORB.dat

虽然默认的 Type=simple 适用于许多 Systemd 服务文件,但当 ExecStart 中的脚本启动另一个进程并完成时,它不起作用,就像 graphite 的 carbon-cache.py 的情况一样。在这些情况下,您需要在 [Service] 部分中明确指定 Type=forking,以便 Systemd 知道查看生成的进程而不是初始进程。

相关内容