如何链接执行脚本?

如何链接执行脚本?

我想自动运行 Python 脚本。我想我已经知道如何使用 cron 条目来实现这一点。

问题是,仅当前一个脚本完成后,我才需要再次运行这个脚本。

Python 脚本从.csv文件中读取(仅第一条记录),并将其作为脚本的参数。然后,该记录从该表(本质上就像需要完成的运行列表)中删除,并与脚本结果一起移至另一个已完成任务的表中。

因此,由于每次运行时都会删除记录,所以我需要仅在前一个脚本完成后才启动下一个脚本的迭代。

我如何/可以在 Ubuntu 16.04 LTS 下做到这一点?

编辑:

我尝试以这种方式安排 python 脚本并像这样安装 run-one:

sudo apt-get update
sudo apt-get install run-one

# The below code is in crontab
* * * * * run-one python '/home/phdmonster/Downloads/nn course/my_code.py'

而且,它不起作用。没有运行任何任务。

由 Sergiy Kolodyazhnyy 编辑:问题已在评论中解决,也在链接的聊天室中讨论过;问题出在额外的*、链接的重复作品上,正如 OP 的评论

答案1

由于您使用的是 cron,因此我假设您会定期启动脚本。每次运行都会修改结果文件。

因此脚本可以在启动时执行以下操作:

  • 检查结果文件是否存在(即这是第一次运行)
  • 如果没有,则创建它
  • 计算前一次运行的开始时间
  • 检查结果文件的修改时间是否比此开始时间新
  • 如果不是,则意味着最后一次运行尚未完成,因此脚本将退出而不执行任何操作

前两项用于启动进程。如果不包括它们,第一次运行将不会执行任何操作,因为它正在等待不存在的前任完成。

答案2

如果您从 cron 启动脚本,并希望在启动下一个脚本之前检查前一个脚本是否已终止,您可以让脚本在某些预定义的位置创建指向其在 /proc(/proc/[PID])中的表示的符号链接,然后在最后将其删除。

然后,您必须在再次运行链接之前检查它是否已断开,或者检查它的命令行/proc/[PID]/cmdline如果它没有断开,因为崩溃会阻止链接被删除,并且会出现另一个具有相同 PID 的进程(如果进程仍在运行,命令行将具有预期的内容。如果是其他内容,则意味着它只是具有相同 PID 的另一个进程)。

如果您只是想链接一系列脚本但前提是前一个脚本没有错误,那么您可能不需要 cron。

您可能只使用&&语法来链接不同的脚本:shell 将测试一个脚本的返回代码,并且只有在没有错误的情况下才启动下一个脚本:

script1 && script2

如果您希望重复执行一个脚本,而没有错误,您可以使用该while语法重复执行它,直到它返回非零返回代码。

while script; do true; done # here the true command, is just a "no operation"

相关内容