每天使用不同的参数运行 cronjob

每天使用不同的参数运行 cronjob

我是一名程序员,对 cron 了解不多,但我想知道这是否可行。

假设我有一个数组[option1, option2, option3]和一个在 NodeJS 中运行的脚本,名为script.js。我想每天凌晨 1 点运行此脚本。cron此脚本的命令如下:

0 1 * * * node ~/script.js

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

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

答案1

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

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

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

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

如果您愿意,您也可以在 cron 中将其写在一行中,尽管这会变得更难阅读。

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

答案2

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

  1. 为这些设置一个单独的 cron 作业:

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

    ETC...

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

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

    (我没有运行后者,所以可能需要进行一些调整 - 但这是总体想法。)

答案3

不,我想不出有什么干净的方法来做到这一点。只需编写一个简单的 shell 包装器脚本,每天检查日期并使用所需的选项启动节点应用程序。

相关内容