[Risolto] Crontab non esegue istruzioni su Xubuntu 22.04

Problemi riscontrati durante l'installazione di Ubuntu, degli aggiornamenti e degli avanzamenti del sistema.
Scrivi risposta
Avatar utente
vioma
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1462
Iscrizione: lunedì 9 febbraio 2009, 0:31
Desktop: xfce, i3
Distribuzione: Xubuntu 22.04.1 LTS
Località: Catania

[Risolto] Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da vioma »

Buonasera, sono solito inserire in crontab l'esecuzione di diversi script per l'aggiornamento del sistema, per il backup di dischi, ecc..
Mi sono accorto che con la 22.04, su Xubuntu, ma anche su Ubuntu e Mate, Cron non mi esegue gli script.
Ho provato a mettere anche istruzioni molto semplici

Codice: Seleziona tutto

24 15	* * *	root	sudo apt update -y
ma non mi esegue nemmeno queste.
Prima non facevo nulla solo scrivere il percorso dell'istruzione dopo "root" e lo script/istruzione veniva eseguito/a, adesso il silenzio assoluto.
Sbaglio io o è cambiato qualcosa?

Edit: c'è un modo per lanciare crontab da terminale per vedere se ci sono errori?
Ultima modifica di vioma il mercoledì 25 gennaio 2023, 12:01, modificato 1 volta in totale.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2839
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da rai »

Ciao,
leggi i log di sistema. Qui spiega dove e come
https://askubuntu.com/a/56811
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da Lucio C »

vioma ha scritto:
venerdì 20 gennaio 2023, 15:26

Codice: Seleziona tutto

24 15	* * *	root	sudo apt update -y
Edit: c'è un modo per lanciare crontab da terminale per vedere se ci sono errori?
"crontab da terminale" e' un po' una contraddizione in termini. O uno esegue il comando a mano da terminale (per verificare errori di sintassi), oppure mette nel crontab un orario prossimo, tipo tra due minuti, e allo stesso tempo vede di intercettare stdout e stderr del comando (se ne hanno) in un file (ma eventuali errori dovrebbero venire mailati all'utente altrimenti). Oppure uno potrebbe mettere dei comandi fittizi, che so

Codice: Seleziona tutto

24 15 * * * (date > myfile ; echo "starting command" >> myfile ; comando ; date >> myfile)
PS non capisco cosa ci stia a fare quel campo "root" nel crontab. Io mi creo dei crontab file di utente (con crontab -e)
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
vioma
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1462
Iscrizione: lunedì 9 febbraio 2009, 0:31
Desktop: xfce, i3
Distribuzione: Xubuntu 22.04.1 LTS
Località: Catania

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da vioma »

Mi fu spiegato che se dovevo eseguire istruzioni in cui vi era il "sudo" davanti se non erano eseguite da root non venivano prese in considerazione, non potevano essere eseguite.
In ogni caso ho sempre, da anni, eseguito i miei script come root ed ha sempre funzionato tutto....forse sbagliando.

Edit: in ogni caso non funziona nemmeno questa istruzione da utente:

Codice: Seleziona tutto

35 17	* * *   echo "ciao" >> /home/xubuntu2204/Scrivania/ciao 
Ultima modifica di vioma il venerdì 20 gennaio 2023, 18:03, modificato 3 volte in totale.
Avatar utente
neolight69
Prode Principiante
Messaggi: 86
Iscrizione: lunedì 19 giugno 2006, 11:06
Desktop: gnome-shell
Distribuzione: Ubuntu 22.04 i686
Contatti:

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da neolight69 »

se cuoi che il cron sia eseguito da root devi inserire le righe nel cron dell'utente root
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da Lucio C »

Ma il demone di cron gira ? Cosa dice

Codice: Seleziona tutto

systemctl status cron
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40295
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da steff »

Non puoi scrivere nel crontab una riga di comando con opzioni ecc, il comando deve essere uno con il percorso completo, quindi devi fare uno script e nel crontab il percorso:

Codice: Seleziona tutto

35 17	* * *   /home/nome/nomescript
https://trovalost.it/crontab-linux/
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 363
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu20@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da Lucio C »

steff ha scritto:
venerdì 20 gennaio 2023, 19:48
Non puoi scrivere nel crontab una riga di comando con opzioni ecc
Non mi torna per nulla, al lavoro ho casi come questo

Codice: Seleziona tutto

59 14  *  *  * find /var/spool/mail -type f ! -name lucio ! -name root ! -name extract.pinerc
3 8,12,16,20 * * * /usr/bin/fetchmail -f /poseidon/lucio/.fetchmailrc.rcm  &> /dev/null
2,12,22,32,42,52 8-20 * * 1-5 csh /poseidon/lucio/bin/pojan >/dev/null 2>&1
59 23 12 3        * (/usr/bin/mailx -s "Auguri" alc </poseidon/lucio/.auguri)
30 8  *  *  *  csh /poseidon/lucio/Procmail/cleanlog
Il primo esegue il comando find, normalmente non trova nulla ma se trova qualcosa mi manda un mail automaticamente in quanto produce output a terminale solo in quel caso
il secondo esegue un comando con redirezione dell'output per evitare di ricevere il mail
il terzo forza uno script a girare in csh e fa la redirezione come sopra
il quarto e' un esempio di comando con sua redirezione in input messo tutto tra parentesi
l'ultimo forza come il terzo, ma manda mail solo in caso di errore
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
steff
Moderatore Globale
Moderatore Globale
Messaggi: 40295
Iscrizione: domenica 18 febbraio 2007, 19:48
Desktop: LXQt+labwc
Distribuzione: Arch; Debian; Ubuntu Server
Sesso: Maschile
Località: Toscana
Contatti:

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da steff »

Allora mi sono sbagliato, scusate.
Hai fatto un backup oggi? Ieri?? Quando???
La Documentazione da consultare e la FAQ sul uso del forum
Sistemi: LXQt - semplice, modulare e configurabile + *ubuntu in Vbox
Avatar utente
vioma
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1462
Iscrizione: lunedì 9 febbraio 2009, 0:31
Desktop: xfce, i3
Distribuzione: Xubuntu 22.04.1 LTS
Località: Catania

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da vioma »

steff ha scritto:
venerdì 20 gennaio 2023, 19:48
Non puoi scrivere nel crontab una riga di comando con opzioni ecc, il comando deve essere uno con il percorso completo, quindi devi fare uno script e nel crontab il percorso:

Codice: Seleziona tutto

35 17	* * *   /home/nome/nomescript
https://trovalost.it/crontab-linux/
No, sempre fatto e funzionava.
Utilizzo Crontab dal 2008 ed ho sempre scritto i percorsi direttamente su /etc/crontab come root aprendolo con Gedit o Mousepad ed ha sempre funzionato, adesso non funziona più e non capisco il perchè.
Vi ringrazio tutti per l'aiuto, proverò ad utilizzare Cron con

Codice: Seleziona tutto

crontab -e
e vedo se riesco a risolvere.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2839
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da rai »

@tutti è perfettamente normale che ci sia l'username nel job se lo si mette in /etc/crontab o in un altro crontab in /etc/cron.d/

Codice: Seleziona tutto

$ cat /etc/crontab 
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
$ 
Diciamo che usare la cartella /etc è una cosa sconsigliata da fare per i propri crontab, anche se hanno bisogno di permessi da superuser. Lì dovrebbero starci i job della distribuzione: niente impedisce che in un aggiornamento vengano sovrascritti

@vioma ma hai provato dal log a capire cosa succede?

Codice: Seleziona tutto

grep -i " cron" /var/log/syslog
ammesso che dall'output del precedente comando non se ne venga a capo, ti consiglio durante il debug di reindirizzare a un file l'output ed eventuali errori dei tuoi comandi.
Lo ottieni incollando in fondo ad ogni riga dei tuoi cronjob tutto il seguente

Codice: Seleziona tutto

 >> /home/xubuntu2204/cron.log 2>&1
e poi vai a leggere il file cron.log che si trova nella Home

PS se crei il job con crontab -e non puoi sperare che vengano eseguiti comandi di sistema che richiedono di essere root: dovresti fare sudo crontab -e
Avatar utente
vioma
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1462
Iscrizione: lunedì 9 febbraio 2009, 0:31
Desktop: xfce, i3
Distribuzione: Xubuntu 22.04.1 LTS
Località: Catania

Re: Crontab non esegue istruzioni su Xubuntu 22.04

Messaggio da vioma »

rai ha scritto:
sabato 21 gennaio 2023, 17:40
@tutti è perfettamente normale che ci sia l'username nel job se lo si mette in /etc/crontab o in un altro crontab in /etc/cron.d/

Codice: Seleziona tutto

$ cat /etc/crontab 
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
$ 
Diciamo che usare la cartella /etc è una cosa sconsigliata da fare per i propri crontab, anche se hanno bisogno di permessi da superuser. Lì dovrebbero starci i job della distribuzione: niente impedisce che in un aggiornamento vengano sovrascritti

@vioma ma hai provato dal log a capire cosa succede?

Codice: Seleziona tutto

grep -i " cron" /var/log/syslog
ammesso che dall'output del precedente comando non se ne venga a capo, ti consiglio durante il debug di reindirizzare a un file l'output ed eventuali errori dei tuoi comandi.
Lo ottieni incollando in fondo ad ogni riga dei tuoi cronjob tutto il seguente

Codice: Seleziona tutto

 >> /home/xubuntu2204/cron.log 2>&1
e poi vai a leggere il file cron.log che si trova nella Home

PS se crei il job con crontab -e non puoi sperare che vengano eseguiti comandi di sistema che richiedono di essere root: dovresti fare sudo crontab -e
Premetto che non sono un informatico, ma utilizzo Ubuntu da 14 anni e utilizzo solo lui anche in ambiente lavorativo.
Lo conosco bene, ma non sono un informatico, quindi le mie conoscenze sono limitate alle esperienze derivate dai problemi che man mano incontro.
Non ho controllato il log perchè non sapevo che esistesse, grazie per avermi informato.
Grazie per avermi detto che i cronjob potrebbero essere cancellati da un aggiornamento di sistema, anche se questo negli anni non è mai avvenuto.
Sto ripassando il Wiki di Cron e sto facendo nuove ricerche.
Il problema è che in tutti i miei script di aggiornamento vi sono istruzioni con il sudo davanti e quindi inserirle all'interno di /etc/crontab mi aiutava a superare questo ostacolo.
Da quello che ho potuto capire, se inserisco i percorsi dei miei script con "crontab -e", questi non saranno eseguiti in quanto verranno eseguiti come utente e non come root.
Adesso vorrei capire una cosa, "sudo crontab -e" mi apre un documento all'interno del quale posso inserire tali percorsi con istruzioni che hanno la necessità di essere eseguite come amministratore? Eseguendo il comando sembra di si.

Edit: Questo il contenuto del log

Codice: Seleziona tutto

grep -i " cron" /var/log/syslog
Jan 22 00:17:01 xub2004-Precision-M6800 CRON[4342]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jan 22 01:17:01 xub2004-Precision-M6800 CRON[52167]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jan 22 01:29:11 xub2004-Precision-M6800 crontab[52239]: (root) BEGIN EDIT (root)
Jan 22 01:30:05 xub2004-Precision-M6800 crontab[52239]: (root) END EDIT (root)
Edit: Inserendo l'istruzione con il comando "sudo crontab -e" sembra funzionare. Lunedì in ufficio farò delle prove e se tutto va bene metto risolto.

Edit: Ho letto la guida (....che avrei dovuto leggere qualche anno fa...) su Cron e Crontab e i comandi funzionano sia su /etc/crontab che su "sudo crontab -e". Il problema del malfunzionamento era dovuto al fatto che anzicchè mettere solo il percorso dello script, come facevo prima e funzionava, adesso vuole messo davanti "bash", altrimenti non me lo esegue.
In pratica il comando giusto è:

Codice: Seleziona tutto

bash /percorso/script.sh
e non

Codice: Seleziona tutto

/percorso/script.sh
come facevo prima.
Attenzione che se eseguite il comando dentro /etc/crontab, se lo script ha necessità dei permessi di amministratore deve essere eseguito come root, per esempio:

Codice: Seleziona tutto

30 14	* * *	root	bash bash /percorso/script.sh
In questo caso, da root, verrà eseguito lo script alle ore 14,30 di ogni giorno.
Però, come consiglia il Wiki, consiglio di mettere gli script che necessitano dell'amministratore su:

Codice: Seleziona tutto

sudo crontab -e
Saluti e grazie a Tutti. :birra:
Scrivi risposta

Ritorna a “Installazione e aggiornamento del sistema operativo”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 14 ospiti