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

我是一个程序员,对crons知之甚less,但我想知道这是否可能。

比方说,我有一个数组[option1, option2, option3]和我在[option1, option2, option3]运行的脚本script.js 。 我想每天凌晨1点运行这个脚本。 这个cron命令是:

 0 1 * * * node ~/script.js 

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

这有可能以任何方式? 我知道我也可以在节点内做到这一点,但是我宁愿从脚本之外做到这一点,并保持原样。

此外,我希望能够在需要时添加/删除选项,但轮换应保持不变。

这很棘手。 在修改选项列表后,轮换保持不变的含义是什么? 毕竟,你可能完全重build列表,摧毁任何关于你在哪里的线索。

你可能做的是build立一个目录,其中包含代表你的选项的文件(通过文件名或内容)。 然后,每当执行cron作业,就会列出该目录,按上次修改时间对文件进行sorting。 您取最旧的条目, touch该文件将其修改时间更改为当前时间,然后使用它来运行脚本。

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

如果你愿意的话,你也可以把它写在一行中作为cron,虽然它会变得更难阅读。

添加选项意味着将新文件添加到选项目录。 删除选项意味着删除文件。 在任何时候,最老的文件都是下一个要运行的文件,所以在循环的最后会添加新的选项,就好像刚刚运行一样。 如果你想重新订购选项,你可以按照你想要的顺序触摸它们。

假设您希望在一周中的每一天都有不同的select。 您可以:

  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 

    (我没有运行后者,所以可能需要一些调整 – 但这是一般的想法。)

不,我可以想象没有干净的方式来做到这一点。 只需编写一个简单的shell封装脚本来检查date,并每天使用您所需的选项启动节点应用程序。