27

我正在尝试编写我自己的(简单的)systemd 服务来做一些简单的事情。(比如使用 shell 脚本将数字 1 到 10 写入文件)。我的服务文件如下所示。

[Unit]
Description=NandaGopal
Documentation=https://google.com
After=multi-user.target

[Service]
Type=forking  
RemainAfterExit=yes
ExecStart=/usr/bin/hello.sh &

[Install]
RequiredBy = multi-user.target

这是我的 shell 脚本。

#!/usr/bin/env bash

source /etc/profile
a=0
while [ $a -lt 10 ]
do
   echo $a >> /var/log//t.txt
        a=`expr $a + 1`
done

出于某种原因,服务没有出现,systemctl 显示以下输出。

root@TARGET:~ >systemctl status -l hello
* hello.service - NandaGopal
   Loaded: loaded (/usr/lib/systemd/system/hello.service; disabled; vendor     preset: enabled)
   Active: inactive (dead)
    Docs: https://google.com

一直试图找出过去 2 天出了什么问题。

4

2 回答 2

37
  • 您已设置Type=Forking,但您的服务不起作用。尝试 Type=oneshot
  • 你有一个“&”你的ExecStart行,这不是必需的。
  • 该服务是disabled,这意味着它不会enabled在启动时启动。您应该运行systemctl enable hello以将其设置为在启动时启动。

您可以检查man systemd.directives以查找可以在unit文件中使用的所有指令的索引。

于 2016-10-05T13:09:42.780 回答
8

几点:

  1. 如果使用Type=forking,建议指定 PidFile。

  2. 在您的情况下Type=simple, 和 ExecStart without&将起作用。

  3. 用于systemctl start service-name启动服务

  4. 然后用于systemctl status service-name检查其状态。如果服务未启动,状态将变为非活动/死机。

于 2017-05-11T04:44:26.413 回答