linux - 如何让 systemd 在启动时运行 python 脚本
问题描述
我试图让 systemd 在启动时执行 python3 脚本,但它失败说由于权限而没有打开一些日志文件,我找不到任何其他解决方案。如果我手动启动它,该脚本可以正常工作,systemctl start LoginAlert
但在启用它以在启动时启动(使用systemctl enable LoginAlert
)后,它会给我下面的错误消息。我使用自定义 .service 脚本来执行脚本。
[Unit]
Description=Login alert system.
[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/LoginAlert.py
[Install]
WantedBy=multi-user.target
● LoginAlert.service - Login alert system.
Loaded: loaded (/etc/systemd/system/LoginAlert.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sat 2020-06-20 22:25:30 EDT; 2min 57s ago
Process: 622 ExecStart=/usr/bin/python3 /usr/bin/LoginAlert.py (code=exited, status=1/FAILURE)
Main PID: 622 (code=exited, status=1/FAILURE)
Warning: some journal files were not opened due to insufficient permissions
解决方案
我遇到过同样的问题。关键是警告:由于权限不足而未打开某些日志文件并不是真正的问题。这只是说您无法看到该服务的日志。
如果您运行sudo systemctl status your-service.service,该消息将消失,您可以看到该服务的日志。
谈到在启动时运行 python 脚本,我遇到了由于“权限”而没有执行 python 脚本的问题。我也那么认为。
事实上,当脚本以 root 用户运行时(因为它在启动时执行),ROOT 没有我的脚本需要的 python3 库。因此,我不需要使用pip3 install selenium安装它们(例如),我需要运行 * sudo pip3 install selenium* 以便 root 用户拥有这些库。
希望有帮助,问候!
推荐阅读
- python - 将 dask 与 h5 文件一起使用时没有要连接的对象
- javascript - 在 Axios 中发布包含(百分号 %)的数据不起作用
- android - SLL HELL:在开发过程中,我需要我的安卓手机信任我的 PC 上运行 IIS 的网站
- django - 保存具有多个单词的实体时多对多重复(例如政府)
- typescript - 标记的联合类型上不存在 TypeScript 属性
- ruby-on-rails - Rails:为什么我会得到如此奇怪的参数哈希?
- facebook - 如何获取 Facebook 访问令牌
- git - 你知道为什么我使用 gitKraken 的贡献不会出现在我的 gitHub 帐户上吗?
- unreal-engine4 - UE4 蓝图:如果服务器生成它,我能否从客户端获取 Actor 的引用?
- bash - 使用 awk 右拆分