Как впоследствии выполнить все команды в crontab?

рассмотрим сложную crontab +100 строк, где много скриптов запускаются впоследствии для опроса и обработки сообщений от разных клиентов.

после перезагрузки сервера я запускаю некоторые скрипты наиболее важных клиентов для немедленного запуска (копирование / вставка).

однако, в один-лайнер, чтобы обработать все кронтаб-записи могут существенно помочь.

все скрипты находятся в /opt/ , поэтому все строки выглядят так:

m h  dom mon dow     /opt/XXXXXX/YYYYY/ZZZZZ.sh >/dev/null 2>&1

в m, h & dow " / " & " - " являются также иногда используется, Ф.е. :

*/3 5-21 * * 1-5     /opt/XXXXXX/YYYYY/ZZZZZ.sh >/dev/null 2>&1
*/5 0-1,5-23 * * *   /opt/XXXXXX/YYYYY/ZZZZZ.sh >/dev/null 2>&1
25 2 * * 7           /opt/XXXXXX/YYYYY/ZZZZZ.sh >/dev/null 2>&1

crontab -l | grep -v "#" | wc -l
129

Т. И. А.


Jord

4
задан Jord Wegge
22.11.2022 13:57 Количество просмотров материала 2909
Распечатать страницу

3 ответа

у вас уже есть задатки ответ на ваш вопрос.

если вы измените свой crontab строки:

crontab -l | grep -v "#" | grep -o '/opt/.*$' > cron.tmp

затем cron.tmp будет содержать все команды, которые необходимо выполнить. Вы можете запустить его как есть с . ./cron.tmp, или вы можете сделать его исполняемым и запустить его непосредственно с chmod +x cron.tmp && ./cron.tmp.

если вы хотите, чтобы избежать временный файл, вы можете использовать:

crontab -l | grep -v "#" | grep -o '/opt/.*$' | while read l; do eval $l; done

вы должны использовать eval так что перенаправления в командах будут действовать на.

обратите внимание, что вы могли бы объединить два grep работает в одном sed замена:

crontab -l | sed -n 's=^[^#]*\(/opt/.*$\)==p' | while read l; do echo eval $l; done
0
отвечен AFH 2022-11-23 21:45

возможно, вы ищете run-parts команда, который принимает каталог в качестве параметра и будет запускать каждый исполняемый файл или сценарий в этом каталоге.

например :

run-parts /etc/cron.daily
1
отвечен harrymc 2022-11-24 00:02

однако, в один-лайнер, чтобы обработать все кронтаб-записи могут существенно помочь.

сделать скрипт, который делает это, а затем вызвать его из crons @reboot:

#!/bin/bash
for script in /opt/XXXXXX/YYYYY/*.sh; do
 $script
 done

если у вас есть рекурсивного обхода дерева каталогов:

#!/bin/bash
find /opt/XXXXXX/ -name '*.sh' -type f -exec '{}' \;

есть только некоторые сценарии, которые вы хотите запустить, но их куча?

этого для каждой такой скрипт:

ln -s /opt/XXXXXX/YYYYY/whatever.sh /opt/run-at-reboot/

тогда звоните из crons @reboot:

#!/bin/bash
for script in /opt/run-at-reboot/*.sh; do
 $script
 done
0
отвечен LawrenceC 2022-11-24 02:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх