大家好,情况如下:
我连接到 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
中为所有作业设置环境变量。crontab
man 5 crontab
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。
由于默认情况下,command
该行的部分由 解释,它的语法比 更简单,因此我建议调用一个脚本(可执行文件,已安装,以 开头)来设置环境,然后调用所需的程序。crontab
/bin/sh
/bin/bash
command
bash
#!/bin/bash