Crontab non funziona mai in /etc/cron.d


32

Ecco cosa ho fatto su Debian Jessie:

  • installa cron via apt-get install cron
  • inserire un backup_crontabfile/etc/cron.d/

Tuttavia l'attività non è mai in esecuzione.

Ecco alcuni output:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

C'è qualcosa da fare per attivare un particolare crontab o per attivare il "servizio" cron in sé?


4
Cosa succede se è in esecuzione e non riesce con un errore che non riesci a vedere perché stai reindirizzando tutto l'output su / dev / null? :)
tink

@tink è possibile invece aggiungere l'output alla fine di un file?
Jivan,

2
certo è; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink

@Jivan, solo una piccola nota: ls /etc/cron.dequivale a cd /etc/cron.d && lsin termini di output. L'unica differenza è che la directory di lavoro non cambierà.
Ha disegnato Chapin il

Risposte:


49

I file che /etc/cron.ddevono elencare anche l' utente in cui deve essere eseguito il lavoro.

vale a dire

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

È inoltre necessario assicurarsi che le autorizzazioni e il proprietario: il gruppo siano impostati correttamente ( -rw-r--r--e di proprietà di root:root)


16
crontab -lriporta voci cron in /var/spool/cron/crontabs/- cioè i crontab per utente . /etc/cron.di file sono crontab di sistema e non segnalati da crontab -l.
Stephen Harris,

5
In realtà ho detto che non funzionava, ma mi sono reso conto che lo è dopo aver aggiunto rootil file - ma crontab -lnon l'ho detto, come hai spiegato perché - grazie per il tuo aiuto
Jivan,

9
sembra che anche il nome del file abbia un ruolo. Nel mio caso avevo aggiunto etc/cron.dun file con un punto nel mezzo del nome e il lavoro non è mai stato eseguito fino a quando non l'ho rinominato
foto

20
stesso problema qui, trattini "-" nel nome del file, cambiandoli in caratteri di sottolineatura "_" risolto il problema, i lavori sono stati eseguiti immediatamente.
Rob,

1
Ho anche avuto un trattino ... ma che ... perché ?! Comunque, grazie @Rob
Nikolay Dimitrov

8

Un'altra cosa che ho osservato è che il file in /etc/cron.dnon può avere un'estensione. Nel mio caso particolare, avevo un collegamento simbolico:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

Le restrizioni sui nomi dei file sono documentate nella pagina man run-part: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html , si può passare un'opzione --regex per sovrascrivere il formato del file.

Il comportamento cron predefinito tuttavia è rimasto senza estensioni, vedere i commenti sotto: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022


Amico, mi hai salvato la giornata!
elboletaire,

2
Questo è corretto su Ubuntu (forse su tutte le distro derivate da Debian). Su Amazon Linux (e forse su tutte le distro derivate da Redhat), puoi avere un punto nel nome del file. Grazie Unix.SE.
Legge

Ho appena controllato un Debian puro, e anche i punti non funzionano lì. I trattini funzionano (diversamente da quanto dice un commento sopra).
Legge

4

Penso che probabilmente manchi solo una riga vuota necessaria dalla fine del tuo file cron. Ho avuto lo stesso problema, ma dopo aver controllato tutto ciò che è elencato qui (permessi utente, nome file, versione cron ecc.), Mi sono reso conto che non avevo un'interruzione di riga dopo l'ultima voce nella mia /etc/cron.d/own_crone che causava l'ignoramento dell'intero file.


2

Se sei l'unico utente su questo computer, potresti voler usare solo crontab -e. Ti verrà richiesto di selezionare un editor la prima volta che esegui il comando. Quindi puoi aggiungerlo ad esso:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Se si passa a un normale account utente, è necessario utilizzare sudo crontab -eper configurare gli script che si desidera vengano pianificati per l'esecuzione root.

crontab -lvisualizza solo il crontab corrente, una volta impostato uno usando crontab -e. Se hai un file cron in /etc/cron.d/, non verrà visualizzato con crontab -l.

Sarà inoltre necessario verificare che lo script è eseguibile con: chmod +x /backup.sh.


1
grazie - in questo caso il crontab è impostato nel contesto di un Dockerfilequindi non posso davvero farlo crontab -e- ma è comunque un'informazione utile
Jivan

2

Per Cron da * bian distro (come Raspbian) devi abilitare il -lparametro del demone Cron. Questo è consigliabile fare usando il /etc/default/cronfile di configurazione, abilitando il EXTRA_OPTS.


Questo è stato sottoposto a downgrade, ma in alcuni casi è corretto, anche se non spiegato. Nelle distribuzioni basate su Debian l' -lopzione al demone cron autorizza una serie estesa di nomi di file nella /etc/cron.ddirectory, quindi se il file viene ignorato silenziosamente perché contiene un punto, allora "aggiungendo -l" o "rimuovendo il punto" risolverà il problema.
Legge 29

1

Controlla la tua versione di cron.

Sembra che se stai usando la cresta di Dillon, non hai bisogno dell'utente in una /etc/cron.dvoce.

L'ho capito dopo aver quasi strappato i capelli rimasti.

Ho una manciata di voci che sono state rilasciate /etc/cron.dda varie installazioni. Dopo alcune indagini, ho scoperto che uno di loro funzionava. Non aveva l'utente. Quindi ho tolto l'utente dagli altri. E hanno iniziato a lavorare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.