Возможно, вы ищете команду run-parts, которая принимает каталог в качестве параметра и запускает каждый исполняемый файл или скрипт в этом каталоге.
Например :
run-parts /etc/cron.daily
Рассмотрим сложный crontab из +100 строк, где впоследствии запускается множество скриптов для опроса и обработки сообщений от разных клиентов.
После перезагрузки сервера я запускаю сразу несколько сценариев наиболее важных клиентов (копирование / вставка).
Однако, однострочная обработка всех записей crontab очень помогла бы.
Все сценарии находятся в / 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
ТИА
Джорд
Возможно, вы ищете команду run-parts, которая принимает каталог в качестве параметра и запускает каждый исполняемый файл или скрипт в этом каталоге.
Например :
run-parts /etc/cron.daily
У вас уже есть ответ на ваш вопрос.
Если вы измените свою 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/.*$\)=\1=p' | while read l; do echo eval $l; done
Однако, однострочная обработка всех записей crontab очень помогла бы.
Создайте скрипт, который делает это, затем вызовите его из cron
s @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/
Затем вызовите это из cron
s @reboot
:
#!/bin/bash for script in /opt/run-at-reboot/*.sh; do $script done