Cronjob: перебирать файлы

0

Я хочу перебрать список скриптов bash с заданием cron. Т.е. каждые два часа я хочу запустить еще один скрипт bash. Моя идея состояла в том, чтобы установить новую переменную окружения, каждый раз, когда скрипт cronjob читает эту переменную окружения и вызывает соответствующий скрипт, а также увеличивает переменную окружения.

Я попробовал это, и это работает, если я звоню test.shиз терминала.

# test.sh
JOB_COUNTER=$((JOB_COUNTER + 1))
echo $JOB_COUNTER
export JOB_COUNTER=$JOB_COUNTER

Если я положу вызов изнутри crontab, $JOB_COUNTERкажется, не увеличивается (я проверяю это с echo $JOB_COUNTER)

Контекст: я хочу добавлять 50 новых заданий в наш кластер каждые два часа, потому что, если бы я отправлял все задания вместе, планировщик запускает слишком много заданий параллельно и в большинстве случаев из-за слишком медленного ввода-вывода. Если cronjob - это не то, что можно использовать, я открыт для других идей.

PR
источник
Не проще ли написать простой скрипт на Python (или даже оболочку), который просто проходит по списку? Просто сделайте sleep () в скрипте - это не займет процессорного времени.
jcoppens
Где вы инициализируете JOB_COUNTER? Также помните, что cron создает новую оболочку для каждого выполнения. Вам нужно сделать JOB_COUNTER постоянным, например, написать его пользователю cron .bashrc.
Bjanssen

Ответы:

0

Каждый test.sh, вызываемый cron, является новым процессом, поэтому переменные окружения удаляются.

Пытаться

# test.sh
JOB_COUNTER=$(< $HOME/jobcounter.txt )
JOB_COUNTER=$((JOB_COUNTER + 1))
echo $JOB_COUNTER > $HOME/jobcounter.txt
echo $JOB_COUNTER
# JOB_COUNTER can be used here 

имейте в виду, что вы не можете использовать JOB_COUNTER при вызове оболочки, если только нет test.sh ( . ./test.sh)

вам придется инициализировать и сбросить $HOME/jobcounter.txt

Archemar
источник