Vielleicht suchen Sie nach dem Befehl run-parts, der ein Verzeichnis als Parameter verwendet und jede ausführbare Datei oder jedes Skript in diesem Verzeichnis ausführt.
Zum Beispiel :
run-parts /etc/cron.daily
Betrachten Sie eine komplizierte Crontab von +100 Zeilen, in der viele Skripts anschließend ausgeführt werden, um Nachrichten von verschiedenen Clients abzufragen und zu verarbeiten.
Beim Neustart des Servers löse ich einige Skripts der wichtigsten Clients aus, die sofort ausgeführt werden sollen (Kopieren / Einfügen).
Ein Einzeiler für die Verarbeitung aller Crontab-Einträge würde jedoch erheblich helfen.
Alle Skripts befinden sich in / opt /, sodass alle Zeilen wie folgt aussehen:
m h dom mon dow /opt/XXXXXX/YYYYY/ZZZZZ.sh >/dev/null 2>&1
In m werden manchmal auch h & dow "/" & "-" verwendet, zB:
*/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
TIA
Jord
Vielleicht suchen Sie nach dem Befehl run-parts, der ein Verzeichnis als Parameter verwendet und jede ausführbare Datei oder jedes Skript in diesem Verzeichnis ausführt.
Zum Beispiel :
run-parts /etc/cron.daily
In Ihrer Frage haben Sie bereits das Zeugnis einer Antwort.
Wenn Sie Ihre crontab
Zeile ändern :
crontab -l | grep -v "#" | grep -o '/opt/.*$' > cron.tmp
dann cron.tmp
enthält alle Befehle, die Sie ausführen müssen. Sie können es so ausführen, wie es ist . ./cron.tmp
, oder Sie können es ausführbar machen und direkt mit ausführen chmod +x cron.tmp && ./cron.tmp
.
Wenn Sie eine temporäre Datei vermeiden möchten, können Sie Folgendes verwenden:
crontab -l | grep -v "#" | grep -o '/opt/.*$' | while read l; do eval $l; done
Sie müssen verwenden, eval
damit die Weiterleitungen in den Befehlen ausgeführt werden.
Beachten Sie, dass Sie die beiden grep
Läufe in einer einzigen sed
Ersetzung kombinieren können :
crontab -l | sed -n 's=^[^#]*\(/opt/.*$\)=\1=p' | while read l; do echo eval $l; done
Ein Einzeiler für die Verarbeitung aller Crontab-Einträge würde jedoch erheblich helfen.
Erstellen Sie ein Skript, das dies ausführt, und rufen Sie es dann von cron
's auf @reboot
:
#!/bin/bash for script in /opt/XXXXXX/YYYYY/*.sh; do $script done
Wenn Sie Verzeichnisse rekursieren müssen:
#!/bin/bash find /opt/XXXXXX/ -name '*.sh' -type f -exec '{}' \;
Haben Sie nur bestimmte Skripts, die Sie ausführen möchten, aber einige?
Tun Sie dies für jedes solche Skript:
ln -s /opt/XXXXXX/YYYYY/whatever.sh /opt/run-at-reboot/
Dann ruf das von cron
's an @reboot
:
#!/bin/bash for script in /opt/run-at-reboot/*.sh; do $script done