【问题标题】:Running python program after it is terminated via crontab通过crontab终止后运行python程序
【发布时间】:2014-03-24 20:25:40
【问题描述】:

我有一个 python webscraping 程序需要在程序终止后连续报废。我的技术如下

crontab -e(设置)

* * * * * /home/ahmed/Desktop/run.sh

运行.sh

    TMP_FILE=/tmp/i_am_running
    [ -f $TMP_FILE ] && exit
    touch $TMP_FILE
    /usr/bin/python /home/ahmed/Desktop/python.py
    rm $TMP_FILE

bash 代码一定有问题,或者可能是我在 crontab 中的命令错误。程序没有运行。请指导


在标记建议后,我修改了这样的脚本

#!/bin/bash
PATH=$PATH:/bin:/usr/bin

date +'%H:%M:%S Started' >> /home/ahmed/Desktop/log.txt

TMP_FILE=/tmp/i_am_running
[ -f $TMP_FILE ] && exit
touch $TMP_FILE

date +'%H:%M:%S Starting Python' >> /home/ahmed/Desktop/log.txt
/usr/bin/python /home/ahmed/Desktop/python.py
rm $TMP_FILE

date +'%H:%M:%S Ended' >> /home/ahmed/Desktop/log.txt

我使用的 cron 命令是* * * * * /home/ahmed/Desktop/run.sh

创建的日志文件是这样的

15:21:01 Started
15:21:02 Starting Python
15:22:02 Started
15:23:01 Started
15:24:01 Started
15:24:30 Ended
15:25:01 Started
15:25:01 Starting Python
15:26:01 Started
15:27:18 Started
15:28:01 Started
15:29:01 Started
15:30:01 Started
15:31:01 Started
15:31:16 Ended
15:32:01 Started
15:32:01 Starting Python
15:33:01 Started
15:34:01 Started

程序似乎在结束之前重新启动。日志文件应该有启动程序、启动、结束、启动程序、启动、结束等。

有人可以指导我吗?

【问题讨论】:

  • 什么没有运行? crontab?剧本本身?提供更多详细信息。
  • run.sh中使用logger;出于调试目的,可能以 #!/bin/bah -vx 开头。
  • 错字我的意思是#!/bin/bash -vx
  • 如果你想让 Python 脚本在崩溃的情况下仍然运行,那么你可以使用 supervisord 之类的东西或创建一个新贵工作

标签: linux bash ubuntu crontab


【解决方案1】:

您是否使脚本可执行?

chmod +x /home/ahmed/Desktop/run.sh

在您的脚本中添加适当的 shebang 和 PATH,使其开始如下:

 #!/bin/bash
 PATH=$PATH:/bin:/usr/bin

从命令行单独尝试您的脚本

/home/ahmed/Desktop/run.sh

如果这不起作用,请将 shebang 行更改为在末尾添加 -xv

#!/bin/bash -xv 

检查 /tmp/i_am_running 是否存在

检查你的 cron 日志

grep CRON /var/log/syslog

考虑更改您的脚本,以便查看它何时启动和/或它是否实际运行了您的 python:

#!/bin/bash
PATH=$PATH:/bin:/usr/bin

date +'%H:%M:%S Started' >> /home/ahmed/Desktop/log.txt

TMP_FILE=/tmp/i_am_running
[ -f $TMP_FILE ] && exit
touch $TMP_FILE

date +'%H:%M:%S Starting Python' >> /home/ahmed/Desktop/log.txt
/usr/bin/python /home/ahmed/Desktop/python.py
rm $TMP_FILE

date +'%H:%M:%S Ended' >> /home/ahmed/Desktop/log.txt

对了,不知道18:01跑一次怎么算“连续刮”?

【讨论】:

  • 我会将时间更改为 * * * * * 。时间只是为了测试目的。让我按照你提到的步骤进行操作。谢谢
  • 我改变了你提到的代码。当我在命令行中键入 grep CRON /var/log/syslog 时,它说二进制文件匹配
  • "cd /var/log" 并查看是否有 cron.log 或您的 cron 已配置使用的其他日志文件。
  • 我认为 cron 也在工作,因为在 python 中它假设将数据保存在数据库中并保存。老实说,我不知道 bash 程序是如何运行和完成任务的。你能帮我找出如何查看日志文件吗?我想学习方法
  • 首先通过检查桌面上的log.txt 并查看时间是否在其中,让脚本正确运行。脚本运行后,将其引入 cron。
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 2010-11-24
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2023-03-30
  • 2017-07-17
相关资源
最近更新 更多