每天运行具有不同参数的cronjob


12

我是一名程序员,对克朗并不了解很多,但是我想知道是否可行。

可以说我有一个数组[option1, option2, option3]和一个脚本,该脚本和脚本在NodeJS中运行,称为script.js。我想每天凌晨1点运行此脚本。在cron这个命令是:

0 1 * * * node ~/script.js

好了,现在棘手的部分是,我想每天轮换选项,例如,星期一我要运行node ~/script.js option1,第二天node ~/script.js option2等等。另外,我希望能够在需要时添加/删除选项,但是旋转应该保持不变。

这有可能吗?我知道我也可以在节点内执行此操作,但我宁愿从脚本外部执行此操作,并保持脚本原样。


2
我建议将此脚本编写为vs尝试让cron自己执行。
EarthmeL15年

Answers:


15

另外,我希望能够在需要时添加/删除选项,但是旋转应该保持不变。

那很棘手。修改选项列表后旋转保持完整意味着什么?毕竟,您可能会完全重建列表,破坏关于您所在位置的任何线索。

您可能可以做的是建立一个目录,其中包含代表您的选择的文件(通过文件名或内容)。然后,无论何时执行cron作业,您都将列出该目录,并按上次修改时间对文件进行排序。您使用最早的条目,touch即该文件将其修改时间更改为当前时间,然后使用它来运行脚本。

#!/bin/bash
cd ~/script-options
next=$(ls -rt | head -n1)
touch -- "${next}"
node ~/script.js ${next} or $(<"${next}")

如果愿意,您也可以在cron的同一行中编写此代码,尽管它将变得更难阅读。

添加选项意味着将新文件添加到options目录。删除选项意味着删除文件。在任何时候,最旧的文件都是下一个要运行的文件,因此新选项将在循环的最后添加,就像刚运行了一样。如果要重新排序选项,则可以按任意顺序触摸它们。


在“列表编辑”中管理选项顺序的方式绝对为+1。
哈根·冯·埃岑

感谢您的回答,我喜欢它并会使用它。当我向列表中添加新的轮换时,轮换的确切顺序并不重要。唯一重要的是,他们每个星期每周都要进行1-2次跑步,而不是在同一天进行两次跑步。
Saif Bechan 2015年

2
$(ls -rt | head -n1)当然会破坏包含换行符的文件名,但是为此,您可能只需“不要这样做”就可以摆脱困境。
cjm

20

假设您要在一周中的每一天使用不同的选项。您可以:

  1. 有一个单独的cron工作:

    0 1 * * 0 node ~/script.js option1
    0 1 * * 1 node ~/script.js option2
    0 1 * * 2 node ~/script.js option3
    

    等等...

  2. 为您bash提供所需的选项:

    0 1 * * * node ~/script.js case `date +%u` in 0 ) echo option1 ;; 1 ) echo option2 ;; 2 ) echo option3 ;;  esac
    

    (我没有运行后者,因此可能需要进行一些调整-但这是总体思路。)


2
感谢您的回答,但我认为它会变得凌乱。我真的需要在某个地方定义一个数组,否则它将无法正常工作。我无法使用echo option1etc,因为每周的选择可能会有所不同。只能在我的Node应用程序中执行此操作,并跟踪我在数据库中最后运行的一个。
Saif Bechan 2015年

13

不,我认为没有干净的方法可以做到这一点。只需编写一个简单的外壳包装脚本即可检查日期,并每天使用所需选项启动节点应用程序。


+1键是“不干净的方法”。
Paolo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.