Domanda: Qual è il motivo per cui il mio lavoro cron non viene eseguito quando utilizzo la percentuale "%" nel mio lavoro cron. Come risolvere questo problema?
Risposta: '%' è il nuovo identificatore di riga nel comando cron. Pertanto, quando usi %, viene interpretato come una nuova riga nel lavoro cron. Vediamo come superare questo problema e utilizzare % nel processo cron.
Definizione del problema con esempio:'%' nel lavoro cron (lavoro cron non riuscito)
* * * * * date +"%d" >> /tmp/non-working-ex1.txt
A scopo di test, tutti i campi nell'esempio crontab sopra contengono *. Questo eseguirà il cronjob specificato ogni minuto.
Per comprendere la configurazione di crontab, leggi il nostro articolo precedente che contiene 15 fantastici esempi di cron job.
Se hai accesso a syslog avrai una linea simile come la seguente.
Jun 20 08:31:01 ubuntu-laptop /USR/SBIN/CRON[6752]: (ramesh) CMD (date +")
Nella voce syslog per questo esempio specifico il comando è mostrato solo come:(data +") . Idealmente dovrebbe essere visualizzato come:data +”%d” . Ciò indica che la percentuale viene analizzata come un simbolo speciale nel cron. cioè termina il comando esattamente alla %age.
Soluzione con esempio:aggirare per utilizzare '%' nel lavoro cron.
È possibile risolvere questo problema utilizzando i due metodi seguenti. Questa soluzione dovrebbe risolvere il problema su tutte le versioni di Unix/Linux, inclusi Ubuntu, Debian, Fedora, RedHat, CentOS, AIX ecc.
Metodo 1:sfuggire alla percentuale con \
Puoi sfuggire alla percentuale con una barra rovesciata e farlo funzionare come un normale lavoro.
$ crontab -l * * * * * date +"\%M" > /tmp/working-ex1.txt
Nota: Questo "\" non verrà visualizzato dal comando date o da qualsiasi altro comando che invochi. Il \ è quello di sfuggire al comportamento speciale della percentuale in cron.
Metodo 2:usa lo script della shell
Crea uno script di shell con il comando percentuale e pianifica lo script di shell come cron job.
$ cat /bin/date.sh date +"%d" $ crontab -l * * * * * /bin/sh /bin/date.sh > /tmp/working-ex2.txt
Al minuto successivo avrai l'output del comando eseguito in /tmp/working-ex2.txt
Ora avrai la seguente riga che ha eseguito correttamente il comando nel syslog.
Jun 20 08:36:01 ubuntu-laptop /USR/SBIN/CRON[6962]: (ramesh) CMD (/bin/sh /bin/date.sh >> /tmp/working-ex2.txt)
Nota: Non dimenticare di rimuovere queste voci cron di test poiché verranno eseguite ogni minuto.
Se hai avuto altri problemi con crontab, faccelo sapere nella sezione commenti.