尝试使用 systemd 将 python 脚本作为服务运行

sli*_*pha 1 debian systemd services

我刚刚得到了一个 debian 8 VPS,我正在尝试将 python 脚本作为服务运行,我写了这个(一切都是通过以 root 身份登录的 ssh 完成的):

[Unit]
Description=My Script Service
After=multi-user.target

[Service]
Type=idle
ExecStart=/usr/bin/python /web/cmcreader/test.py > /web/cmcreader/test.log 2>&1

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我已经把它放在/lib/systemd/system 我然后chmoded它:

chmod 644 /lib/systemd/system/cmcreader.service

然后我尝试使用以下方法激活它:

systemctl daemon-reload
systemctl enable cmcreader.service
Run Code Online (Sandbox Code Playgroud)

但是最后一个命令返回 ( enable) :

Failed to execute operation: Invalid argument

我做错了什么?谢谢。

Mar*_*erg 5

man systemd.directives你可以找到任何 systemd 指令的文档。在这里您可以找到ExecStart=记录在man systemd.service.

那里的文档说:

不支持使用“<”、“<<”、“>”和“>>”的重定向,不支持使用“|”的管道,使用“&”在后台运行程序以及其他 shell 语法元素。

通常也不需要它们。systemd默认情况下已经在后台运行应用程序,因此您不需要&. 它还会自动将输出捕获到 STDOUT 和 STDERR 并为您记录下来,因此您也不需要将输出重定向到日志文件。

仅用于journalctl -u cmcreader查看您的服务的日志,或journalctl查看所有日志。

如果您不确定 systemd 文件的语法,您可以使用:

systemd-analyze verify ./path/to/your.service
Run Code Online (Sandbox Code Playgroud)

此外,您创建的服务文件会进入/etc/systemd/system. 该/lib目录用于由包安装的服务文件,而不是人类。

最后,enable不启动服务,它只是运行该[Install]部分,将您的应用程序设置为在启动时启动。

要启动服务使用systemctl start your.service.