问题描述
我是一个相当新的 Python 程序员,对 crontab 有点熟悉。我正在尝试做的可能不是最佳实践,但这是我最熟悉的。
我有一个带有几个 python 脚本的树莓派,我想在启动时运行并保持在后台运行。它们是无限循环程序。它们在 cmd 终端中进行了测试和工作,并且已经运行了几个星期。只是厌倦了手动启动它们。当 pi 经历电源循环时。
所以我做了一个 sudo crontab -e
并将这一行添加为我唯一的条目
@reboot /usr/bin/python3 /usr/bin/script.py &
如果我完全复制粘贴(减去@reboot),它将在 cmd 行中成功运行。
我正在使用 cmd:
pgrep -af python
检查它是否正在运行。我通常会看到两个脚本在那里运行,但不是我要添加的脚本。
我不确定自己哪里出错了,也不确定解决问题的最佳方法。从我一直在做的研究来看,它似乎应该有效。
感谢您的帮助 凯文
解决方法
您可能会发现在 Raspberry Pi 启动时为要启动的每个程序创建一个 systemd 服务文件更容易。 systemd 附带了一些工具来帮助您调试配置。
这是一个示例 systemd 服务文件(位于 /etc/systemd/system/myscript.service
)的样子:
[Unit]
Description=My service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /usr/bin/script.py
WorkingDirectory=/home/pi/myscript
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
然后您可以使用以下命令启用该程序在启动时运行:
sudo systemctl enable myscript.service
这些示例来自Raspberry Pi's documentation about systemd。但是因为 systemd 在 Linux 世界中被广泛使用,所以您也可以遵循其他 Linux 发行版的文档和 StackOverflow 答案。