我在将python脚本作为systemd服务运行时遇到问题

时间:2020-08-15 21:25:05

标签: python systemd python-daemon

我有一个提醒应用程序,我想将其作为服务运行。我在“ / lib / systemd / system”下创建了一个名为“ reminder_py.service”的服务文件。 'reminder_py.service'中的命令:

[Unit]
Description=Dummy Service
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
Username=hrx
Groupname=hrx
ExecStart=/usr/bin/python3 /home/hrx/reminder/reminder.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

我尝试使用以下命令启动它:

sudo systemctl daemon-reload
sudo systemctl enable reminder_py.service
sudo systemctl start reminder_py.service

但是sudo systemctl status reminder_py.service命令说:

hrx@X230:/lib/systemd/system$ sudo systemctl status reminder_py.service
● reminder_py.service - Dummy Service
     Loaded: loaded (/lib/systemd/system/reminder_py.service; enabled; vendor p>
     Active: failed (Result: exit-code) since Sat 2020-08-15 23:59:06 +03; 2min>
    Process: 13952 ExecStart=/usr/bin/python3 /home/hrx/reminder/reminder.py (c>
   Main PID: 13952 (code=exited, status=2)

Aug 15 23:59:06 X230 systemd[1]: Started Dummy Service.
Aug 15 23:59:06 X230 systemd[1]: reminder_py.service: Main process exited, code>
Aug 15 23:59:06 X230 systemd[1]: reminder_py.service: Failed with result 'exit->

我该如何解决这个问题?

以下内容可能会有所帮助:

hrx@X230:/lib/systemd/system$ users
hrx

hrx@X230:/lib/systemd/system$ groups
hrx adm cdrom sudo dip plugdev lpadmin sambashare


hrx@X230:/lib/systemd/system$ ls -al | grep reminder_py.service 
-rwxrwxrwx  1 root root   256 Aug 15 23:55 reminder_py.service

我发现另一个站点的评论可能对我有帮助。但是我不太明白他在说什么。

一个简单易用的教程。我要加一些警告-将.service文件编写为python脚本将以root身份运行,这可能会带来意想不到的后果。环境也将与普通用户不同。要修复,请在User=username行之前添加行Group=groupnameExecStart。要添加脚本期望的环境变量,请在Environment=”variable_name=variable_value”行之前添加ExecStart行。

1 个答案:

答案 0 :(得分:0)

我通过用以下文件替换了内容来解决了这个问题:

[Unit]
Description=Reminder App
After=multi-user.target
Conflicts=getty@tty1.service

[Service]
Type=simple
ExecStart=/home/hrx/anaconda3/bin/python /home/hrx/Desktop/reminder/reminder.py
StandardInput=tty-force

[Install]
WantedBy=multi-user.target

要了解python的路径,请运行以下命令:

type -a python