Pagina 1 di 1

[RISOLTO] Incomprensione funzionalità Crontab

MessaggioInviato: 23/09/2018, 19:02
da marco91
Ciao a tutti !
Vorrei imparare ad utilizzare crontab e stato provando ad avviare uno script bash che ho creato, ma che al riavvio del pc non si avvia.
Non sono ancora pratico con crontab: ho stampato un manuale, ma avviare uno script .bash non mi sta riuscendo.
Vi posto un foto in allegato, affinchè possa mostrare come ho proceduto al collocamento del file .sh
Nella foto, ho utilizzato le stringhe speciali, in questo caso "reboot", affinchè lo script si avvii automaticamente all'accensione del pc.
Ho provato anche ad utilizzare anacron (non contrab), ma al riavvio non ho lo script impostato.

Il mio script inizia e finisce così, e possiede i privilegi di esecuzione:
#!/bin/bash

exit 0

Grazie

Re: incomprensione funzionalità Crontab

MessaggioInviato: 24/09/2018, 5:07
da Aki
Mi sembra di vedere almeno due errori nella ultima riga che hai aggiunto al file /etc/crontab
1) manca lo username dell’utente
2) il comando sembra sintatticamente errato (tra firewall ed il nome dello script c’è uno spazio)

Inoltre c’è un potenziale errore concettuale: quando lo script è eseguito non è detto che le interfaccie di rete siano già configurate.

Infine, ti suggerirei di non inviare immagini, ma fornire il contenuto dei file che ritieni utile fornire (come in questo caso) in formato testuale in modo che siano più facilmente leggibili e, all’uopo, modificabili in caso di suggerimenti.

Quale manuale di crontab hai stampato ?

Re: incomprensione funzionalità Crontab

MessaggioInviato: 24/09/2018, 8:06
da marco91
La guida che ho stampato è questa e ho seguito "esempio di contrab": http://guide.debianizzati.org/index.php ... uling_Cron

Re: incomprensione funzionalità Crontab

MessaggioInviato: 24/09/2018, 13:42
da Aki
marco91 ha scritto:La guida che ho stampato è questa e ho seguito "esempio di contrab": http://guide.debianizzati.org/index.php/Utilizzo_del_servizio_di_scheduling_Cron

Grazie per il riscontro sulla guida.

L’ “esempio di crontab” che hai seguito è relativo al file crontab di un utente generico e non ad /etc/crontab : la guida a cui fai riferimento illustra questa differenza, che forse ti è sfuggita.

Hai compreso gli errori che ti ho segnalato ?

Re: incomprensione funzionalità Crontab

MessaggioInviato: 24/09/2018, 22:29
da marco91
Ciao Aki.
Ho capito di essermi sbagliato ad approcciarmi, ma non ho capito come procedere ad avviare correttamente lo script

Re: incomprensione funzionalità Crontab

MessaggioInviato: 25/09/2018, 6:42
da Aki
Cos’è che non ti è chiaro in queste righe:
Mi sembra di vedere almeno due errori nella ultima riga che hai aggiunto al file /etc/crontab
1) manca lo username dell’utente
2) il comando sembra sintatticamente errato (tra firewall ed il nome dello script c’è uno spazio)

Re: incomprensione funzionalità Crontab

MessaggioInviato: 25/09/2018, 20:14
da marco91
sono riuscito a capire gli errori: chiedo che gli amministratori del forum correggano la guida, aggiungendo questo particolare per avviare correttamente uno script bash con crontab
Per avviare correttamente uno script bash è necessario aggiungere "sh" prima dello script .sh da avviare: questo passaggio è necessario affinchè gli utenti inesperti possano non avere problemi.
Mi sono ricordato che per avviare uno script bash col terminale aggiungevo "sh" prima dello script, e facendolo in crontab, tutto ha funzionato.
Ho aggiunto l'user dell'utente , in "root", come suggerito.
Ovviamente per rendere ammissibile l'esecuzione dello script bash, è necessario modificare il parametro SHELL in "SHELL=/bin/bash" come spiega la guida.
Posto una foto, affinchè possa indicare meglio la segnalazione da aggiungere nella guida "http://guide.debianizzati.org/index.php/Utilizzo_del_servizio_di_scheduling_Cron" per avviare gli script bash correttamente.

Re: incomprensione funzionalità Crontab

MessaggioInviato: 26/09/2018, 5:46
da Aki
marco91 ha scritto:Per avviare correttamente uno script bash è necessario aggiungere "sh" prima dello script .sh da avviare: questo passaggio è necessario affinchè gli utenti inesperti possano non avere problemi.

Quanto indichi non è una regola generale.

Con il comando "sh" hai "aggirato" la verosimile reale causa del mancato avvio dello script (dopo aver apportato le correzione agli errori che ti ho indicato), che però non hai identificato. Tale causa verosimilmente consiste nella mancata attribuzione dei privilegi di esecuzione allo script "/home/marco/Scrivania/iptables.sh". In altri termini, lo script nel tuo caso non è avviato perché, sebbene inizi con l'indicazione dello "hashbang" (#!/bin/bash ), non ha i privilegi di esecuzione (ma solo quelli di lettura e/o scrittura).

Il codice sorgente (in linguaggio C) di cron che esegue il comando, per Debian Stable, è reperibile a questo indirizzo: https://sources.debian.org/src/cron/3.0pl1-130/do_command.c/#L375

marco91 ha scritto:Mi sono ricordato che per avviare uno script bash col terminale aggiungevo "sh" prima dello script

Questo accade solo nel caso in cui lo script da eseguire non abbia i privilegi di esecuzione (oppure, pur avendo i privilegi di esecuzione, non inizia con l'hashbang) e, quindi, per essere eseguito deve essere indicato esplicitamente l'interprete da utilizzare (in questo caso /bin/bash o /bin/dash) per eseguirlo (passandolo come parametro al programma dell'interprete).

marco91 ha scritto:Posto una foto, affinchè possa indicare meglio la segnalazione da aggiungere nella guida "http://guide.debianizzati.org/index.php/Utilizzo_del_servizio_di_scheduling_Cron" per avviare gli script bash correttamente.

Ti ringrazio, anche a nome degli estensori e revisori della guida, per la segnalazione, ma, alla luce di quanto indicato, presumo che nella guida forse si può ricordare di verificare che un eventuale script inserito in crontab disponga dai privilegi di esecuzione.

nota: volendo eseguire dei test, puoi utilizzare il seguente codice sorgente (in linguaggio C) di prova equivalente in buona parte a quello di cron; la descrizione della funzione di libreria execle è disponibile nel manuale "The GNU C Library" (all'indirizzo https://www.gnu.org/software/libc/manual/html_node/Executing-a-File.html#Executing-a-File ) :
Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

extern char **environ;

int main(char **argv, int argc) {

        char *shell="/bin/bash";
        char **jobenv = environ;
        char *cmd="/home/$USER/test_script.sh";
        execle(shell, shell, "-c", cmd, (char *)0, jobenv);
        return(0);
}

dove il file test_script.sh contiene:
Codice: Seleziona tutto
#!/bin/bash
ls

Se il file test_script.sh non ha i privilegi di esecuzione:
Codice: Seleziona tutto
$ ls -la test_script.sh
-rw-r--r-- 1 aki aki 16 set 26 06:17 test_script.sh
il codice sopra riportato restituisce:
Codice: Seleziona tutto
$ ./test
/bin/bash: /home/aki/test_script.sh: Permesso negato

Al contrario, se ha i privilegi di esecuzione:
Codice: Seleziona tutto
$ chmod u+x /home/aki/test_script.sh
$ ls -la test_script.sh
-rwxr--r-- 1 aki aki 16 set 26 06:17 test_script.sh
$ ./test
 Immagini    projects    share            Video

Infine, torno a chiedere cortesemente, salvo altri elementi ostativi, di non allegare immagini, ma il testo dei file e/o schermate che intendi riportare nel forum.

Re: [RISOLTO] Incomprensione funzionalità Crontab

MessaggioInviato: 26/09/2018, 13:28
da marco91
grazie per la spiegazione.
La prossima volta non allego foto, ma testi e auspico che la guida abbia questa tua spiegazione chiara.