【问题标题】:How do I create a cronjob for these commands?如何为这些命令创建一个 cronjob?
【发布时间】:2019-07-15 15:26:29
【问题描述】:

我想在虚拟环境中每天运行一个 cron 作业来运行一个 python 脚本。所以我尝试设置一个 cron 作业,但它似乎没有执行。

如果我要从终端正常运行程序,我会输入:

  1. source ig/venv/bin/activat进入激活我的虚拟环境

  2. cd ig/mybot/src/ 导航到我的目录

  3. python ultimate.py运行我的程序

到目前为止,这是我的 cron 工作。我已将其设置为 1 以每分钟运行一次,这样我就可以看到它正在工作,但没有任何反应。

1   *   *   *   *   source ig/venv/bin/activate && cd ig/mybot/src/ && python ultimate.py

编辑:我已经更新了我的程序,因此不需要命令行提示。我只需要运行这三个简单的命令。

【问题讨论】:

标签: python bash cron virtualenv cron-task


【解决方案1】:

你可以用另一个 python 脚本本身来包装它。创建一个新的 python 脚本并运行它而不是 cron。

查看subprocess 模块。

示例: 你的命令会变成subprocess.call(['source','ig/venv/bin/activate']) 在包装器 python 脚本中。

另外,input("Enter the value") 会提示您输入用户信息。

有了以上两个,你的问题就python解决了。

【讨论】:

    【解决方案2】:

    我不确定这是否是个好主意,但您可以编写这样的脚本。

    #!/usr/bin/env bash
    
    PYTHON_PROJECT_DIR=/path/to/python/project/dir
    
    pushd ${PYTHON_PROJECT_DIR}
    
    VALUES="first line of stream\nsecondline of stream\n"
    
    pipenv run /path/to/your/script.py < (echo -e $VALUES)
    
    popd
    

    pushdpopd 是随目录堆栈移动的命令,因此您将位于堆栈顶部的目录中,因此通过添加一个目录,您 move 到工作目录,然后通过弹出,您将回到初始位置。

    使用pipenv 允许您在虚拟环境中运行脚本(配置起来并不难),这样您就可以在项目的.env 文件中使用环境变量,并且您只需使用这个项目的依赖。 (python相关)。

    如果你像这样传递值,python 脚本在它向stdin 请求值时,它将使用你回显的值(逐行,第一行是第一个输入,依此类推)

    这可能是一种方式。

    就我个人而言,每当我做cronjobs 时,我喜欢直接运行 bash 脚本,因为我可以添加额外的日志记录,所以使用包装脚本似乎并没有那么不合理。

    您可以做的另一件事是获取 python 可执行路径(用于虚拟环境),并将其用作解释器,方法是将 #!/usr/bin/env python 替换为 #!/path/to/pythons/virtual/env/interpreter 但你不会得到.env variables(可能有办法真正得到它们。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 2020-05-09
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-16
      相关资源
      最近更新 更多