python - 如何在树莓派或任何其他 unix 系统上编写多命令 cronjob

标签 python linux unix cron raspberry-pi

我正在尝试在 python 3 中运行一个 cron 脚本,所以我必须设置一个虚拟环境(如果有更简单的方法,请告诉我)并且为了运行脚本我需要在脚本的父级中文件夹,因为它在那里写入文本文件。所以这是我想出的一长串命令,它在控制台中工作但在 cron 中不起作用(或者我找不到输出..)

如果 5 个星号不变成要点,我就无法输入它。但我在 cron 选项卡中有它们。

cd usr/local/sbin/cronjobs && . virtualenv/secret_ciphers/bin/activate && cd csgostatsbot && python3 CSGO_STATS_BOT_TASK.py && deactivate

最佳答案

看起来你可能有一只流浪猫 .在那里可能会导致命令链中出现错误。

试试这个:

cd usr/local/sbin/cronjobs && virtualenv/secret_ciphers/bin/activate && cd csgostatsbot && python3 CSGO_STATS_BOT_TASK.py && deactivate

假设 virtualenv 目录在 cronjobs 目录中。

此外,您可能希望跳过激活/停用,直接从 virtualenv 运行 python3 解释器。即

/usr/local/sbin/cronjobs/virtualenv/secret_ciphers/bin/python3 /usr/local/sbin/cronjobs/csgostatsbot/CSGO_STATS_BOT_TASK.py

根据 OP 的评论进行编辑:

activate 调用激活了 virtualenv。不确定 . 是什么除了导致 shell 命令解析问题之外会做。

这两个示例都涉及到 virtualenv 的使用。您不需要显式调用activate。只要您从 virtualenv 的目录中调用解释器,您就在使用 virtualenvactivate 本质上是一种方便的方法,可以调整您的 PATH 使 python3 和其他 bin 文件引用 virtualenv' s 目录而不是系统安装。

第二次编辑以回应来自 OP 的附加评论:

您应该重定向 stderr,即:

/usr/local/sbin/cronjobs/virtualenv/secret_ciphers/bin/python3 /usr/local/sbin/cronjobs/csgostatsbot/CSGO_STATS_BOT_TASK.py > /tmp/botlog.log 2>&1

看看是否会产生任何额外的信息。

此外,cron 中的 5 个星号将每 365 年 7 月 24 日每分钟运行该脚本。这真的是你想要的吗?

第三次编辑以回应来自 OP 的附加评论:

如果你想让它一直运行,我不确定你是否真的想使用 cron。即使有 5 个星号,它也会每分钟运行一次。这意味着它并不总是在运行。它每分钟运行一次,如果运行时间超过一分钟,您可能会运行多个副本(这可能会或可能不会成为问题,具体取决于您的代码),如果它运行得非常快,比如在几个秒,您将有剩余的时间等待它再次运行。

听起来您希望脚本本质上是一个守护进程。也就是说,只需在 while (True) 中运行主脚本即可。循环,然后只启动一次。然后你可以通过 <crtl>+c 退出它,否则它会一直运行。

关于python - 如何在树莓派或任何其他 unix 系统上编写多命令 cronjob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25110635/

相关文章:

linux - AWS ubuntu实例无法到达世界

unix - curl 语法不起作用。 REST API 测试

unix - 从静态库中提取函数名称

linux - 从文件列表变量中删除所有非目录

c++ - 具有缓冲能力的专用线程(每个连接一个线程)(c/c++)

c - "ar"实用程序到底做了什么?

Python:datetime64 范围问题

Python:顺序调用子进程(在本例中为 espeak)

python - 构建所选特征的字典

python - ValueError : not enough values to unpack (expected 2, got 1) when splitting line