it-swarm-eu.dev

Jak mohu přimět cron, aby právě teď pracoval na testování / ladění? bez změny harmonogramu!

Mám práci cron, která je naplánována na každodenní provoz, kromě změny plánu, existuje ještě nějaký jiný způsob, jak provést testovací příkaz právě teď a zjistit, zda funguje tak, jak bylo zamýšleno?

EDIT: (z komentářů) Vím, že příkaz funguje dobře, když jej zadáte do Shell (my Shell), ale chci vědět, jestli to funguje správně, když ho cron spustí, mohlo by to být ovlivněno ENV nebo Shell specifickými věcmi (~ rozšíření) ) nebo vlastnictví a povolení, nebo ...

165
Ali

Pokud vím, neexistuje žádný způsob, jak to přímo udělat, protože cron má zvláštní účel - spouštění příkazů plánů v určitém čase. Nejlepší je tedy ručně vytvořit položku crontab nebo napsat skript, který odstraní a resetuje prostředí.

33
Ulrich Dangel

Můžete donutit crontab ke spuštění pomocí následujícího příkazu:

run-parts /etc/cron.daily
72
Vadim Sluzky

Můžete simulovat uživatelské prostředí cron, jak je vysvětleno v „Manuální a okamžité spuštění úlohy cron“ . To vám umožní otestovat práci úlohy, když bude spuštěna jako uživatel cron.


Výňatek z odkazu:


Krok 1 : Tento řádek jsem dočasně vložil do crontabu uživatele:

* * * * *   /usr/bin/env > /home/username/tmp/cron-env

poté byl soubor zapsán, jakmile byl soubor zapsán.

Krok 2 : Udělal jsem si malý run-as-cron bash skript obsahující:

#!/bin/bash
/usr/bin/env -i $(cat /home/username/tmp/cron-env) "[email protected]"

Takže jako dotyčný uživatel jsem byl schopen

run-as-cron /the/problematic/script --with arguments --and parameters
54
Michael Barton

CronitorCLI má příkaz cronitor select, které vám umožní vybrat a spustit jakoukoli úlohu cron z příkazového řádku. Pro použití účtu Cronitor nemusíte vytvářet účet.

https://cronitor.io/docs/using-cronitor-cli

Zde je příklad:

[email protected]:~$ cronitor select

Use the arrow keys to navigate: ↓ ↑
? Select job to run:
▸ /var/runner/src/bin/batch_reports.py runner.settings.prod
  /var/runner/src/bin/trigger_reports.py runner.settings.prod
  ... etc ...
6
Shane H

Našel jsem řešení, které se mi zdá být o něco lepší pro mé účely (příkazy zobrazené pro CentOS/RHEL-like, ale měly by být v podstatě přizpůsobitelné kdekoli).

Vyžaduje to libfaketime - můžete si jej vytvořit ze zdroje na https://github.com/wolfcw/libfaketime nebo použít pouze jeden z mnoha balíčků z https: //pkgs.org/download/libfaketime .

  1. Zastavit službu crond - service crond stop
  2. Zjistit, kdy by vaše služba měla provozovat - https://crontab.gur , je pro to docela užitečná.
  3. Spusťte crond v režimu popředí pomocí nástroje faketime libfaketime (umožňuje vám předstírat syscall pro vyhledávání času pro všechny podřízené procesy).
    1. Neprovozoval bych to na produkčním serveru
    2. faketime '2019-10-17 07:59:50' /usr/sbin/crond -n -x test,sch
[[email protected] ~]# faketime '2019-10-17 07:59:50' /usr/sbin/crond -n -x sch
debug flags enabled: sch
[4841] cron started
log_it: (CRON 4841) INFO (Syslog will be used instead of sendmail.)
log_it: (CRON 4841) INFO (RANDOM_DELAY will be scaled with factor 34% if used.)
log_it: (CRON 4841) INFO (running with inotify support)
[4841] GMToff=0
log_it: (CRON 4841) INFO (@reboot jobs will be run at computer's startup.)
[4841] Target time=1571299200, sec-to-wait=11
user [root:0:0:...] cmd="/usr/libexec/myexc/crontesting.cron > /dev/null 2> &1"
[4841] Target time=1571299260, sec-to-wait=60
log_it: (root 4844) CMD (/usr/libexec/myexc/crontesting.cron > /dev/null 2> &1)
log_it: (root 4843) CMDOUT (/bin/bash: -c: line 0: syntax error near unexpected token `&')
log_it: (root 4843) CMDOUT (/bin/bash: -c: line 0: `/usr/libexec/myexc/crontesting.cron > /dev/null 2> &1')
1
javanix

Ne moc elegantní, ale funkční: zde je to, co používám k zahájení práce na 5. řádku mého crontabu:

 eval "$(crontab -l | sed -n '5p' | tr -s ' ' | cut -d' ' -f 6-)"

Zobrazuje crontab, dostane pátý řádek, nahradí více mezer jedním mezerou, vezme vše od 6. sloupce do konce a poté jej spustí pomocí eval.

0
Basj

Cituji odpověď ( zobrazit úplně ) z chyby serveru :


Hromadné provádění příkazů crontab:

crontab -l | grep -v '^#' | cut -f 6- -d ' ' | while read CMD; do eval $CMD; done

spustit pod jiným uživatelem:

Sudo -H -u username bash -c "crontab... "

0
T.Todua