使用Cron在启动时运行Python脚本

46

蟒蛇徽标有时,当您的Raspberry Pi启动时,您想运行Python脚本。有很多不同的技术可以做到这一点,但我更喜欢使用“cron”.

Cron是一个作业调度程序,它使系统可以在定义的时间或间隔执行任务。这是一个非常强大的工具,在很多情况下都很有用。您可以使用它来运行命令,或者在这种情况下使用Python脚本。

第1步–创建一个Python脚本

第一步是创建您的Python脚本。这将是在启动时运行的脚本。重要的是记住它的名称和位置。在此示例中,我假设脚本被称为“MyScript.py”它位于“/home/pi/”.

仔细检查你’通过输入以下内容获得正确的路径:

cat / home / pi / MyScript.py

这应该显示脚本的内容。

确保您的脚本可以正常工作,并按预期运行。一旦在启动时运行,它就不会’太容易调试所以不要’t rush!

第2步– Add A New Cron Job

要为Cron创建新工作,我们将修改“crontab”。该表包含Cron将监视并根据其运行的作业列表’的详细信息。要编辑它,我们使用命令:

须藤 克朗tab -e

系统的每个用户(即“pi”)可以拥有自己的Crontab,但是在这种情况下,我们希望将其添加为管理员,因此我们在“crontab -e” command with “sudo”。您应该看到如下所示的内容:

Crontab示例-引导时使用Python

使用光标键滚动到底部,然后添加以下行:

@重启python / home / pi / MyScript.py &

这告诉Cron,每次引导(或重新引导或启动)时,我们都希望使用脚本MyScript.py运行Python。的“&”在该行的末尾表示该命令在后台运行,它赢得了’t停止像以前一样启动系统。

您的屏幕应如下所示:

Crontab示例-引导时使用Python

要保存这些更改,请单击“CTRL-X”, then “Y” and 科幻nally “Return”。您现在应该回到命令提示符。

要开始测试,您现在可以使用以下命令重新启动:

须藤 reboot

设置完成后,无论何时重新启动或启动Pi,Python脚本都将运行。有时您可能会重新启动并进入’希望脚本运行。要停止它,您可以找到它的进程号和“kill”它。为此,请输入:

ps辅助 | grep / home / pi / MyScript.py

这应该给你一行“root”并以脚本的路径结尾。之后“root”应该是一个进程号。例如 :

根  1863  0.0  1.0  24908  4012 ?  Sl  19:45  0:00  蟒蛇  / home / pi / MyScript.py

在这种情况下,我们可以使用以下命令停止该过程:

须藤杀 1863

最后的想法

如果您喜欢冒险,可以编写Python脚本以在满足特定条件时自动退出,因此您无需’t need 至 ever “kill” it. Ideas include :

  • 测试GPIO引脚并在按下开关时退出。可能按住了两个开关。
  • 测试网络连接是否可用,如果存在则退出。这可能表明您正在测试(例如,摄像机),并且只希望在没有网络时自动运行脚本。
  • 检查是否存在特定文件。这将允许您创建一个命名文件,以防止脚本在下次启动时运行。

还有其他在启动时运行脚本的技术,您可能想使用Google“rc.local” or “init.d”。我更喜欢Cron方法,因为它是如此简单。

有关Cron强大功能的更多信息,请查看 维基百科Cron页面.

分享。

46条留言

  1. J·阿什菲尔德

    感谢这篇文章,我今天上午大部分时间都在寻找一种简单的方法来完成此操作。它’为了方便,我尝试测试其他方法,但是对于像我这样的新手来说,它们太难了。我非常喜欢阅读您的帖子。我最喜欢的项目是20×4 液晶屏,我买了一个,用它来显示数字温度计的温度(一个来自您的帖子),让它在启动时运行程序-

  2. 我有一个根据GPIO引脚读数播放wav文件的python程序。当我从命令行运行它时,它工作正常,但它没有’当我使用Cron启动它时,似乎无法正常工作。当我发出‘ps aux’命令,但是当我使用Cron启动时没有音频。另一个奇怪的是‘sudo 杀’不会杀死该进程。

    我必须使用‘sudo’从命令行,但是‘ps aux’ shows that it runs as 根 when I put it in Cron, so I don’t think that’s the problem.

    关于如何调试此功能的任何想法?谢谢!

  3. 我也有类似的问题
    与上述完全相同的问题。根据脚本自动启动的方法,它是否可以工作…
    根据gpio状态的中断,播放wav文件的python脚本。
    这里’对我有用的是:

    1.制作文件“/bin/autologin.sh”

    2.将以下两行放入其中:
    #!/ bin / bash
    /bin/login -f 根

    3. set 权限
    chmod a + x /bin/autologin.sh

    4.编辑“/etc/inittab”
    找到看起来很相似的行并将其编辑为:
    1:2345:respawn:/ sbin / getty -n -l /bin/autologin.sh 38400 tty1

    5.编辑“/root/.bashrc”
    添加以下三行:
    如果[[$(tty)==‘/dev/tty1’ ]]; then
    蟒蛇 / home / pi / yourscript.py
    科幻

    并且应该在每次启动时可靠地启动。

  4. 有类似的问题
    让我的RPi从MPR121接收输入,或者通过串行触发arduino,用LED灯带制作图案,或者使用py游戏混音器播放声音。
    If I run from the command line (I have just put the 科幻le in / home / pi / beetbox_serial.py) run as 须藤 then all is well.
    如果我安排它(cron或/etc/rc.local在启动时尝试它),那么我会得到串行输出(并因此亮起),但没有声音-只是弹出声(也没有从我得到的Python脚本中打印输出(告诉我会触发哪些输入)

    这是环境设置问题吗?这是由于GPIO引起的吗? 通用输入输出’s are reading it’s是有问题的声音输出(似乎是该线程的共同点)

    任何帮助,将不胜感激

    谢恩

  5. 嗨我 did as you explained, my script is just

    打印“hello”

    打印“hello”
    打印“hello”
    打印“hello”

    我删除了& at the end of the 克朗tab statements, but nothing happens. Do you have any idea why this is happening?

    • 可能正在运行,但您赢了’看不到输出,因为它发生在您之前’ve已登录。如果您的脚本以循环方式闪烁LED,将更易于查看。我使用这种技术来启动读取传感器并拍照的脚本,从而使脚本在后台循环运行。

    • 感谢您的提示!想知道为什么我的脚本在启动时无法捕获视频’工作正常,我意识到由于您的评论,我忽略了这一点。

  6. 唐’不知道为什么,它对我不起作用-。我已认真遵守上述指示。

    1.我做了一个python脚本“Hello.py” in /home/pi
    2.我检查了它是否正在运行,是否正在输出。
    3. I used 克朗tab -e command and added the line @重启python / home / pi / 你好 &
    4. Reboot RPi using 须藤 reboot , but nothing happened!

    请帮帮我。

  7. 我无法编辑文件。我真的可以’t编辑人们建议我编辑的任何文件以使脚本在开始时运行。

    始终存在权限问题。我该如何解决?我每次尝试都使用全新安装。

    必须有某种方法可以绕过整个过程“permissions”完全没有任何意义。

    我需要在启动时运行脚本。

  8. 我使用我的python脚本进行了此操作,现在在启动pi引导屏幕后,它会引导至黑屏,然后我无能为力。无论如何,有没有告诉它在无法正常启动的情况下停止执行此操作?通过SD卡上的cmdline.txt是否有任何内容?还是要告诉它在启动完成并变黑之前不要运行cron?

    • 在启动分区中添加一个空白文件,名为“ssh”. Then use SSH 至 remotely connect 至 the Pi over a network. You can then edit the 克朗 settings.

  9. 嗨!前一天,我在用一个小的Python代码使用此示例,它运行良好!

    顺便说一句,使用这种方法而不是在启动时将Python代码作为守护程序运行的利弊是什么?从复杂性的角度来看!

  10. 好的想法在这里揭晓。

    With 克朗 you can do more
    http://escapequotes.net/scheduling-tasks-with-cron/

    @重启–在启动时运行一次。
    @每年– Run 上ce a year, “0 0 1 1 *”.
    @每年– (same as @yearly)
    @每月– Run 上ce a month, “0 0 1 * *”.
    @每周– Run 上ce a week, “0 0 * * 0”.
    @日常– Run 上ce a day, “0 0 * * *”.
    @午夜– (same as @daily)
    @hourly– Run 上ce an hour, “0 * * * *”.

  11. 嗨我’我正在为一个RFID项目进行编码,并想在启动时运行python脚本。由于某种原因,它不是’t完全运行,而不是根本运行’使用pi代替。有人知道为什么吗?

    谢谢

  12. 杜德非常感谢。一世’我读了很多其他指南,他们要么是荒谬的,要么是直截了当的’工作。这就像一个20秒的工作,而且效果很好。谢了哥们。非常感谢!

  13. 克里斯·乔丹

    I’m pretty sure using @重启in the 克朗tab 上ly runs the command when you actually reboot the PI (i.e. run 须藤 reboot), if you simply pull the 功率 and plug it back in, it doesn’t run.

    此错误导致我在停电后洗了个冷水(我的PI用电加热)。

    This seems like an odd behaviour I know, but I tested it a few times. I wonder why 克朗 doesn’也有@startup吗?

  14. 萨拉·拉玛蒂

    谢谢,它的工作原理很棒。如果我想让程序永远运行,例如我有一个python脚本,则pi相机等待按下按钮,然后捕获图像。如果我希望程序始终运行,并且picamera,该怎么办等待按下我想要什么时间?

  15. 你好

    I tried adding a 克朗 job which opens a particular url in browser when invoked in 蟒蛇.
    But the action didn happen when 克朗 was executed. I get the results when I run from command line. Please help

  16. 嗨,我按照指示进行操作,似乎可以正常工作,因为我可以看到pid,但是我的py文件有一些输出,即print。那么如何启动终端并查看输出?谢谢

  17. 对于那些在启动时运行python脚本但必须延迟一点的人,可以使用一个较小的解决方法。我在运行@reboot的python脚本时遇到问题,但在外围设备就绪之前就运行了。因此,我从中修改了crontab:

    @reboot/ usr / bin / 蟒蛇 /path/to/my/pythonscript.py

    @重启睡眠20&&/ usr / bin / 蟒蛇 /path/to/my/pythonscript.py

    修改之后,所有内容都像魅力一样。
    这样工作就像一种魅力。

  18. 我按照步骤操作,当我重新启动时,似乎我的python程序正在运行(使用我将sensordata记录到文本文件中的代码,LED每5秒闪烁一次)。当我想停止该程序时,我执行了上述的kill命令。
    不幸的是,脚本没有’停下来。 (指示灯持续闪烁)
    重新启动后,我的数据’也没有记录,没有.txt文件。

    程序怎么可能不’t stop whit the 杀-command? Any solutions?

    • 除非刷新或关闭文件,否则数据可能会保存在内存中。因此,在将任何数据写入文件之前,该进程可能已被终止。有时您可能需要使用Python“flush” and the “os.fsync” commands. I’我不确定为什么kill命令是’工作。如果该进程从进程列表中消失,则它不再运行。您确定要杀死正确的过程吗?

  19. Crontab可以很好地运行,但是请注意它在后台运行,并且没有连接输出的终端。一世’d想从pi 克朗tab运行python脚本,该脚本输出到小的PiTFT显示器作为默认终端。是否有人找到可打印到终端的解决方法?

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.