Jak mogę następnie wykonać wszystkie polecenia w crontab?

0

Rozważmy skomplikowany crontab z +100 wierszami, w którym wiele skryptów jest uruchamianych później do ankiety i amp; przetwarzać wiadomości od różnych klientów.

Po ponownym uruchomieniu serwera uruchamiam natychmiast kilka skryptów najważniejszych klientów (kopiuj / wklej).

Jednak jednokreskowy proces przetwarzania wszystkich wpisów crontab znacznie by pomógł.

Wszystkie skrypty znajdują się w / opt /, więc wszystkie linie wyglądają tak:

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

Wm, h & amp; dow "/" & amp; Czasami używane są także „-”, np. :

*/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

T.I.A.
Jord

Jord Wegge
źródło

Odpowiedzi:

0

Masz już zadatki na odpowiedź w swoim pytaniu.

Jeśli zmodyfikujesz swój crontab linia do:

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

następnie cron.tmp będzie zawierał wszystkie polecenia, które musisz uruchomić. Możesz go uruchomić tak, jak jest . ./cron.tmp, lub możesz sprawić, żeby był wykonywalny i uruchamiał go bezpośrednio z chmod +x cron.tmp && ./cron.tmp.

Jeśli chcesz uniknąć pliku tymczasowego, możesz użyć:

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

Musisz użyć eval tak, że przekierowania w poleceniach zostaną uruchomione.

Pamiętaj, że możesz połączyć dwa grep natrafia na singiel sed podstawienie:

crontab -l | sed -n 's=^[^#]*\(/opt/.*$\)=\1=p' | while read l; do echo eval $l; done
AFH
źródło
Dokładnie to, czego szukałem .... Dzięki! Zmodyfikowano nieco, aby zobaczyć, co się dzieje: crontab -l | grep -v "#" | grep -o '/opt/.*$' | while read l; do eval $l && echo $l && sleep 2; done
Jord Wegge
1

Być może szukasz komenda run-parts , który pobiera katalog jako parametr i uruchamia każdy plik wykonywalny lub skrypt w tym katalogu.

Na przykład :

run-parts /etc/cron.daily
harrymc
źródło
0

Jednak jednokreskowy proces przetwarzania wszystkich wpisów crontab znacznie by pomógł.

Stwórz skrypt, który to zrobi, a następnie skontaktuj się z nim cron jest @reboot:

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

Jeśli musisz powtarzać katalogi:

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

Masz tylko niektóre skrypty, które chcesz uruchomić, ale kilka z nich?

Zrób to dla każdego takiego skryptu:

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

Następnie zadzwoń do tego cron jest @reboot:

#!/bin/bash
for script in /opt/run-at-reboot/*.sh; do
 $script
 done
LawrenceC
źródło