【问题标题】:how to write a multi-command cronjob on a raspberry pi or any other unix system如何在树莓派或任何其他 unix 系统上编写多命令 cronjob
【发布时间】:2014-09-26 10:50:46
【问题描述】:

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

我不能输入这 5 个星号而不把它变成项目符号。但我在 cron 选项卡中有它们。

cd usr/local/sbin/cronjobs && . virtualenv/secret_ciphers/bin/激活 && cd csgostatsbot && python3 CSGO_STATS_BOT_TASK.py && 停用

【问题讨论】:

  • 你可以编写一个 shell 脚本并从中运行这些文件。
  • 会有什么不同?
  • 你到底想要什么?
  • 在 python3 中运行脚本。而已。 :/ 它变得如此复杂,因为脚本不兼容 python 2.7,这是我的 pi 上的默认 python
  • 在你的 pi 上安装 python3。没有?

标签: python linux unix cron raspberry-pi


【解决方案1】:

看起来你可能有一个流浪的.,这可能会导致命令链出错。

试试这个:

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

假设 virtualenv 目录在 cronjobs 目录中。

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

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

根据 OP 的 cmets 进行编辑:

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 个星号将每分钟 24/7/365 运行脚本。这真的是你想要的吗?

第三次编辑以回应 OP 的补充评论:

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

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

【讨论】:

  • .用于激活虚拟环境,但我会尝试这个
  • 没有虚拟环境就无法运行,因为我安装了一个没有它就无法工作的模块。
  • 它似乎在控制台中工作正常,但是尽管创建了文件,但 cronjob 并没有将任何内容打印到我的日志文件中。 /usr/local/sbin/cronjobs/virtualenv/secret_ciphers/bin/python3 usr/local/sbin/cronjobs/csgostatsbot/CSGO_STATS_BOT_TASK.py > /tmp/botlog.log
  • 谢谢,我应该可以从这里弄清楚,它找不到文件。
  • 不,我确实希望它每分钟都运行。 1分钟比它必须的要短。它可以每 5 次运行一次,但 1 次运行效果更好,不过,谢谢
【解决方案2】:

试试这些命令。希望您最终得到一个更简单、更易于理解的安排:

$ sudo apt-get install python3 # Just in case you haven't already
$ sudo apt-get install python3-pip
$ sudo pip3 install praw
$ vi CSGO_STATS_BOT_TASK.py
«Ensure that "#!/usr/bin/env python3" is the first line»
$ chmod +x CSGO_STATS_BOT_TASK.py
$ crontab -e
* * * * * /path/to/CSGO_STATS_BOT_TASK.py

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多