Otázka: Jaký je důvod, proč se moje úloha cron nespustí, když ve své úloze cron použiji procento „%“. Jak tento problém vyřešit?
Odpověď: „%“ je nový specifikátor řádku v příkazu cron. Když tedy použijete %, bude to interpretováno jako nový řádek v úloze cron. Pojďme se podívat, jak tento problém vyřešit, a použít % v úloze cron.
Definice problému s příkladem:„%“ v úloze cron (neúspěšná úloha cron)
* * * * * date +"%d" >> /tmp/non-working-ex1.txt
Pro účely testování všechna pole ve výše uvedeném příkladu crontab obsahují *. To provede zadaný cronjob každou minutu.
Chcete-li porozumět konfiguraci crontab, přečtěte si náš dřívější článek, který obsahuje 15 úžasných příkladů úloh cron.
Pokud máte přístup k syslog, budete mít podobný řádek jako následující.
Jun 20 08:31:01 ubuntu-laptop /USR/SBIN/CRON[6752]: (ramesh) CMD (date +")
V položce syslog pro tento konkrétní příklad je příkaz zobrazen pouze jako:(datum +”) . V ideálním případě by to mělo být zobrazeno jako:datum +”%d” . To znamená, že procento je analyzováno jako speciální symbol v cronu. tj. ukončí příkaz přesně v % věku.
Řešení s příkladem:Vyřešte použití „%“ v úloze cron.
Tento problém můžete vyřešit pomocí následujících dvou metod. Toto řešení by mělo vyřešit problém na všech variantách Unix / Linux, včetně Ubuntu, Debian, Fedora, RedHat, CentOS, AIX atd.,
Metoda 1:Escapování procenta pomocí \
Procento můžete ukončit pomocí zpětného lomítka a zajistit, aby to fungovalo jako normální úloha.
$ crontab -l * * * * * date +"\%M" > /tmp/working-ex1.txt
Poznámka: Toto „\“ nebude vidět příkazem date ani jiným příkazem, který vyvoláte. \ má uniknout speciálnímu chování procent v cronu.
Metoda 2:Použijte skript Shell
Vytvořte skript shellu pomocí příkazu procent a naplánujte skript shellu jako úlohu cron.
$ cat /bin/date.sh date +"%d" $ crontab -l * * * * * /bin/sh /bin/date.sh > /tmp/working-ex2.txt
V další minutě budete mít výstup provedeného příkazu v /tmp/working-ex2.txt
Nyní budete mít v syslogu následující řádek, který úspěšně provedl příkaz.
Jun 20 08:36:01 ubuntu-laptop /USR/SBIN/CRON[6962]: (ramesh) CMD (/bin/sh /bin/date.sh >> /tmp/working-ex2.txt)
Poznámka: Nezapomeňte odstranit tyto testovací záznamy cronu, protože se spustí každou minutu.
Pokud jste měli s crontabem nějaký jiný problém, dejte nám o něm vědět v sekci komentářů.