在 rasbian 上使用 crontab 在启动时自动启动 Python 脚本

问题描述

我是一个相当新的 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 答案。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...