[RISOLTO] Uso di rc.local

Ottimizzazione, pulizia, gestione e manutenzione di una Debian Box
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

[RISOLTO] Uso di rc.local

Messaggio da andrea.deroni »

Sto cercando di avviare un piccolissimo script per settare il monitor e vorrei farlo partire all'avvio.

Nella guida
http://guide.debianizzati.org/index.php ... _in_Debian

si dice che
Se si è interessati soltanto a eseguire dei comandi dopo che il sistema e i servizi sono stati avviati, senza lanciare qualcosa che resti in esecuzione, è sufficiente modificare il file /etc/rc.local,
Non avendo mai scritto un file rc.local ho cercato in rete e ho trovato che è ora deprecato, anche se si può comunque recuperarne l'uso.

Cosa devo fare?
Ultima modifica di andrea.deroni il 11/06/2020, 0:39, modificato 1 volta in totale.
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Uso di rc.local

Messaggio da Aki »

Ciao,

Che versione di Debian stai usando ? Se non lo sai, puoi impartire il comando:

Codice: Seleziona tutto

cat /etc/debian_version
Se stai usando una versione di Debian che utilizza systemd, il file /etc/rc.local è supportato per compatibilità con il precedente sistema di init:

Codice: Seleziona tutto

man systemd-rc-local-generator
che nella descrizione indica:
DESCRIPTION
systemd-rc-local-generator is a generator that checks whether /etc/rc.local exists and is executable, and if it is
pulls the rc-local.service unit into the boot process. This unit is responsible for running this script during
late boot. Note that the script will be run with slightly different semantics than the original System V version,
which was run "last" in the boot process, which is a concept that does not translate to systemd. The script is run
after network.target, but in parallel with most other regular system services
.

systemd-rc-local-generator also checks whether /usr/sbin/halt.local exists and is executable, and if it is pulls
the halt-local.service unit into the shutdown process. This unit is responsible for running this script during
later shutdown.

Support for both /etc/rc.local and /usr/sbin/halt.local is provided for compatibility with specific System V
systems only. However, it is strongly recommended to avoid making use of these scripts today, and instead provide
proper unit files with appropriate dependencies for any scripts to run during the boot or shutdown processes.

systemd-rc-local-generator implements systemd.generator(7).
Quindi, dovrebbe essere sufficiente modificare (se già esistente) o creare il file /etc/rc.local , renderlo eseguibile ed inserirvi lo script che desideri avviare. Lo script sarà eseguito, come leggi nella descrizione sopra riportata, dopo che è stato configurato il sottosistema di rete, quindi, devi verificare se l'esecuzione delle script che desideri avviare automaticamente è condizionata dall'esecuzione precedente di altri servizi del sistema operativo (oppure no).
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

Ok, molto chiaro, proverò. Ma approfitto per chiederti un'altra cosa: ho tentato, prima di scrivere il post, di seguire le indicazioni della guida al link che ho messo sopra. Non mi è chiaro:
- se lo script deve avere una intestazione particolare, che contenga, fra le altre cose, indicazioni sui run level; e poi, ho cercato ma non ho trovato una guida dettagliata sulla scrittura segli script;
- se l'attivazione automatica dello script possa essere fatta con l'uno o con l'altro dei comandi

Codice: Seleziona tutto

systemctl enable mio_start_script.sh

Codice: Seleziona tutto

# update-rc.d <nome_script_in_init.d> default <priorità_start> <priorità_stop>
oppure se vadano eseguiti in sequenza.

io ho provato a eseguirli n sequenza ma con il secondo ho ottenuto un errore che riguardava proprio la mancanza della dichiarazione di un run level.
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

P.s. - Sto usando Debian 10.4
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Uso di rc.local

Messaggio da Aki »

andrea.deroni ha scritto:Non mi è chiaro:
- se lo script deve avere una intestazione particolare, che contenga, fra le altre cose, indicazioni sui run level;
È bene chiarire che Il tuo script non è un "servizio" del sistema operativo.

Il tuo script, richiamato dall'interno di /etc/rc.local (tramite systemd), non deve avere una particolare intestazione.

La "particolare intestazione" a cui probabilmente ti riferisci era quella necessaria per gli script che corrispondevano ai veri e propri "servizi" avviati dal "vecchio" sistema di init (chiamato sysv-init): infatti, il vecchio sistema di init (sostituito per default da systemd [0] ormai già da due versioni di Debian Stable) era basato interamente su shell script. In quel caso, la "particolare intestazione" serviva a distinguere le proprietà del servizio e le modalità di interazione con il gestore dei servizi.
andrea.deroni ha scritto:- se l'attivazione automatica dello script possa essere fatta con l'uno o con l'altro dei comandi

Codice: Seleziona tutto

systemctl enable mio_start_script.sh

Codice: Seleziona tutto

# update-rc.d <nome_script_in_init.d> default <priorità_start> <priorità_stop>
oppure se vadano eseguiti in sequenza. io ho provato a eseguirli n sequenza ma con il secondo ho ottenuto un errore che riguardava proprio la mancanza della dichiarazione di un run level.
L'attivazione dello script richiamato da /etc/rc.local è automatica all'avvio; una cautela, è verificare se il servizio rc-local.service è presente e qual'è il suo stato.

Il comando "systemctl enable mio_start_script.sh", così come indicato nella guida, mi sembra fuorviante se non proprio errato: i file relativi alla configurazione di servizi con systemd sono creati usando una specifica sintassi, non sono shell script e il comando systemctl non richiama mai direttamente il nome dello shell script o del comando avviato dal servizio (come hai riportato nel comando precedente).

Il comando update-rc.d appartiene al precedente sistema di init e, pur supportato con systemd per compatibilità a ritroso, è preferibile utilizzare i comandi e la sintassi di systemd.

Il contenuto di default di /etc/rc.local (che dovrebbe essere già sul tuo sistema) è in seguente:

Codice: Seleziona tutto

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0
Il richiamo del tuo script o il tuo script dovrebbe essere tra:

Codice: Seleziona tutto

# By default this script does nothing.
e

Codice: Seleziona tutto

exit 0
[0] https://wiki.debian.org/it/systemd
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

Grazie per la charissima spiegazione
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Uso di rc.local

Messaggio da Aki »

andrea.deroni ha scritto:Grazie per la charissima spiegazione
Felice di esserti stato d'aiuto.

nota: potresti fornire un aggiornamento in merito all'altra discussione che hai in corso all'indirizzo http://forum.debianizzati.org/viewtopic ... 18&t=55826 ?
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

Ho messo ora una breve nota "finale" (almeno per il momento) nell'altro post.
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Uso di rc.local

Messaggio da Aki »

andrea.deroni ha scritto:Ho messo ora una breve nota "finale" (almeno per il momento) nell'altro post.
Ti ho risposto.
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

ti aggiorno qui, invece, sull'uso di rc.local.
Il file non esisteva ma l'ho costruito con il modello che mi avevi lasciato; lo ho reso eseguibile ed ho riaavviato. Nessun esito.
Ho verificato, però, che è stato creato rc.local.service, il che mi fa intuire che qualcosa abbia funzionato; nel dubbio che i comandi che avevo inserito fossero, in qualche modo, sbagliati ho avviato a mano rc.local con sh, e il monitor ha assunto la risoluzione che volevo.

Mi viene il dubbio che ci sia un processo di set del monitor (o della scheda grafica) che avviene DOPO l'esecuzione di rc.local e che vanifica il mio tentativo; un processo che non si limita a cambiare la risoluzione del monitor perché se cerco di selezionare quella che voglio (introdotta dai comandi xrandr) non la trovo fra le opzioni delle preferenze ...
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Uso di rc.local

Messaggio da Aki »

andrea.deroni ha scritto: Mi viene il dubbio che ci sia un processo di set del monitor (o della scheda grafica) che avviene DOPO l'esecuzione di rc.local e che vanifica il mio tentativo; un processo che non si limita a cambiare la risoluzione del monitor perché se cerco di selezionare quella che voglio (introdotta dai comandi xrandr) non la trovo fra le opzioni delle preferenze ...
Può essere che lo script sia eseguito prima che la sessione grafica sia attiva, ma può anche essere che hai sbagliato i permessi o qualcosa del tuo script: dopo aver eseguito le verifiche del caso, se lo desideri, puoi inviare qui nel forum i riscontri oggettivi (es. log dei permessi, copia dello script, etc.)

edit: per lanciare uno script all’avvio della sessione grafica, vedi https://wiki.debian.org/Xsession
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
Aki
Hero Member
Hero Member
Messaggi: 9970
Iscritto il: 27/12/2007, 16:59

Re: Uso di rc.local

Messaggio da Aki »

Dal log che hai inviato nell'altra discussione [0] per altro quesito risulta:

Codice: Seleziona tutto

******************************************
systemctl --failed --no-pager
******************************************
  UNIT             LOAD   ACTIVE SUB    DESCRIPTION                
● rc-local.service loaded failed failed /etc/rc.local Compatibility
Questo significa che il servizio non è riuscito ad avviare il file /etc/rc.local : ne hai verificato i permessi ?

[0] http://forum.debianizzati.org/viewtopic ... 18&t=55826
⢀⣴⠾⠻⢶⣦⠀
⣾⠁⢠⠒⠀⣿⡁ Debian - The universal operating system
⢿⡄⠘⠷⠚⠋⠀ https://www.debian.org
⠈⠳⣄⠀
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

ho attribuito i permessi, secondo quanto ho trovato in rete, con:

Codice: Seleziona tutto

chmod a+x /etc/rc.local
non mi è chiaro a cosa serva "a", mi pareva che bastasse renderlo eseguibile ... quindi devo studiare meglio la questione ...
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

Dunque, ho dato una "botta" a rc.local dandogli tutti i permesso

Codice: Seleziona tutto

chmod 777
e ho rifatto il boot, poi sono andato a vedere syslog e ho trovato

Codice: Seleziona tutto

Jun  3 15:14:24 Archimede systemd[1]: Starting /etc/rc.local Compatibility...
Jun  3 15:14:24 Archimede systemd[1]: Starting TeamViewer remote control daemon...
Jun  3 15:14:24 Archimede rc.local[525]: Can't open display
Jun  3 15:14:24 Archimede systemd[1]: rc-local.service: Control process exited, code=exited, status=1/FAILURE
Jun  3 15:14:24 Archimede systemd[1]: rc-local.service: Failed with result 'exit-code'.
Jun  3 15:14:24 Archimede systemd[1]: Failed to start /etc/rc.local
e la cosa interessante, mi sembra è la riga

Codice: Seleziona tutto

Jun  3 15:14:24 Archimede rc.local[525]: Can't open display
che non so spiegarmi ma direi che il centro della questione, che potrebbe spiegare come mai xorg.conf non ha esito.

In effetti in tutti i boot si ritrova la stessa sequenza di righe nel log ...

che ne pensi?
Ultima modifica di andrea.deroni il 03/06/2020, 23:39, modificato 1 volta in totale.
andrea.deroni
Newbie
Newbie
Messaggi: 25
Iscritto il: 15/05/2020, 22:02

Re: Uso di rc.local

Messaggio da andrea.deroni »

Ho trovato ora la stessa domanda qui
https://askubuntu.com/questions/1095765 ... at-startup

peccato che non ci sia una risposta ...
Rispondi