大家好,情况如下:我是一个基于Ubuntu的EC2机器的AWS (我目前正在工作的Ubuntu18.04)。我可以管理机器内的文件,并从终端运行脚本,但我希望机器运行脚本,即使我没有连接。所以我想到了一项服务。
使用systemd我将这个文件定位在/lib/systemd/system上:
[Unit]
Description=Test Service
After=network.target
Conflicts=getty@tty1.service
[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
中运行,它就能工作。
您知道如何获得better对错误的解释吗?
发布于 2021-08-22 18:46:27
通过cron
运行的作业,或者systemd
启动脚本不运行在桌面上相同的运行时环境中。systemd
启动脚本以root
的形式运行。您的PATH
更改或其他环境变量设置都不会自动传播到cron
作业。例如,没有$DISPLAY
,所以GUI程序需要特殊处理(读man xhost
)。
可以为cron
文件中的所有crontab
作业设置环境变量,读取man 5 crontab
。
查看echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
在每个环境中的结果。
由于crontab
行的D13
部分默认由/bin/sh
解释,它的语法比/bin/bash
更简单,因此我建议让command
调用bash
脚本(可执行、挂载,从#!/bin/bash
开始),后者设置环境,然后调用所需的程序。
https://unix.stackexchange.com/questions/665768
复制相似问题