AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 717388
Accepted
Saif Bechan
Saif Bechan
Asked: 2015-08-28 17:42:24 +0800 CST2015-08-28 17:42:24 +0800 CST 2015-08-28 17:42:24 +0800 CST

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

  • 772

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

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

0 1 * * * node ~/script.js

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

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

cron
  • 3 3 个回答
  • 3604 Views

3 个回答

  • Voted
  1. Konrad Gajewski
    2015-08-28T19:29:04+08:002015-08-28T19:29:04+08:00

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

    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
      

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

    • 20
  2. Best Answer
    MvG
    2015-08-29T03:56:46+08:002015-08-29T03:56:46+08:00

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

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

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

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

    如果你愿意,你也可以在单行中为 cron 编写它,尽管它会变得更难阅读。

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

    • 15
  3. EEAA
    2015-08-28T17:53:55+08:002015-08-28T17:53:55+08:00

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

    • 13

相关问题

  • 每 4 小时运行一次 cron 的正确语法是什么?[复制]

  • 用于 mysql 数据库清理和备份的 crontab

  • Windows cron 作业

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • crontab ifconfig 什么都不输出

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve