Systemd - Python 脚本 - 主进程已退出,代码=已退出,状态=1/失败

Systemd - Python 脚本 - 主进程已退出,代码=已退出,状态=1/失败

大家好,情况如下:
我连接到 AWS 的基于 ubuntu 的 EC2 机器(我目前正在使用 Ubuntu 18.04)。我可以管理机器内的文件并从终端运行脚本,但我希望机器即使在未连接时也运行脚本。所以我想到了一个服务。

使用 systemd 我在 /lib/systemd/system 上找到了这个文件:

[Unit]
Description=Test Service
After=network.target
[email protected] 

[Service]
Type=simple
ExecStart=/usr/bin/python3  /home/ubuntu/GreenHouse/Catalog/Catalog_REST.py
StandardInput=tty-force 

[Install]
WantedBy=multi-user.target

我启动了服务,但是当我检查状态时:

 sudo systemctl status CATALOG_REST-py.service

我收到此错误:

● CATALOG_REST-py.service - Test Service    
Loaded: loaded (/lib/systemd/system/CATALOG_REST-py.service; enabled; vendor preset: enabled)    
Active: failed (Result: exit-code) since Sun 2021-08-22 16:54:13 UTC; 1s ago   
Process: 23968 ExecStart=/usr/bin/python3 /home/GreenHouse/Catalog/Catalog_REST.py (code=exited,
status=1/FAILURE)  
Main PID: 23968 (code=exited, status=1/FAILURE)

Aug 22 16:54:13 ip-172-31-13-245 systemd[1]: Started Test Service. 
Aug 22 16:54:13 ip-172-31-13-245 systemd[1]: CATALOG_REST-py.service: Main process exited, code=exited, status=1/FAIL 
Aug 22 16:54:13 ip-172-31-13-245 systemd[1]: CATALOG_REST-py.service: Failed with result 'exit-code'.

我想说,如果我在终端中运行python3 /home/GreenHouse/Catalog/Catalog_REST.py,它就可以工作。

你知道一些获得证书的方法吗更好地解释错误

答案1

作业通过 运行cron,或者systemd启动脚本不在桌面上运行的同一运行时环境中运行。systemd启动脚本作为root.您的任何PATH更改或其他环境变量设置都不会自动传播到您的cron作业。例如,没有$DISPLAY,因此 GUI 程序需要特殊处理(读取man xhost)。

可以在Read 文件cron中为所有作业设置环境变量。crontabman 5 crontab

echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias查看每个环境中的结果 。

由于默认情况下,command该行的部分由 解释,它的语法比 更简单,因此我建议调用一个脚本(可执行文件,已安装,以 开头)来设置环境,然后调用所需的程序。crontab/bin/sh/bin/bashcommandbash#!/bin/bash

相关内容