Назад | Перейти на главную страницу

Запуск cronjob с разными параметрами каждый день

Я программист и плохо разбираюсь в кронах, но хочу знать, возможно ли это.

Допустим, у меня есть массив [option1, option2, option3] и сценарий, который я запускаю в NodeJS, называется script.js. Я хочу запускать этот скрипт каждый день в час ночи. В cron команда этого будет:

0 1 * * * node ~/script.js

Что ж, теперь сложная часть, я хочу менять параметры каждый день, поэтому, например, в понедельник я хочу запустить node ~/script.js option1, следующий день node ~/script.js option2 и так далее. Кроме того, я хочу иметь возможность добавлять / удалять параметры при необходимости, но вращение должно оставаться неизменным.

Возможно ли это каким-либо образом? Я знаю, что могу сделать это и внутри узла, но я бы предпочел сделать это вне сценария и оставить сценарий как есть.

Допустим, вам нужен другой вариант для каждого дня недели. Ты можешь:

  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
    

    (Я не запускал последний, поэтому может потребоваться некоторая настройка - но это общая идея.)

Кроме того, я хочу иметь возможность добавлять / удалять параметры при необходимости, но вращение должно оставаться неизменным.

Это сложно. Что означает, что ротация останется неизменной после изменения списка опций? В конце концов, вы можете полностью перестроить список, уничтожив любую подсказку о том, где вы были.

Что вы, вероятно, могли бы сделать, так это создать каталог с файлами, которые представляют ваши параметры (либо по имени файла, либо по его содержимому). Затем всякий раз, когда выполняется задание cron, вы перечисляете этот каталог, сортируя файлы по времени последнего изменения. Вы берете самую старую запись, touch этот файл, чтобы изменить время его модификации на текущее время, а затем использовать его для запуска сценария.

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

Если хотите, вы можете написать это в одной строке и для cron, хотя это станет труднее читать.

Добавление параметров означает добавление новых файлов в каталог параметров. Удаление параметров означает удаление файлов. В любой момент самый старый файл запускается следующим, поэтому новые параметры будут добавлены в самом конце цикла, как если бы он только что был запущен. Если вы хотите изменить порядок опций, вы можете касаться их в любом порядке.

Нет, я не могу придумать чистого способа сделать это. Просто напишите простой сценарий оболочки, который проверяет дату и запускает ваше приложение узла с необходимыми параметрами каждый день.