Come eseguire script e comandi in sospensione e ripresa su Linux

Il modo migliore per eseguire script e comandi su suspend e resume su Linux prima della sospensione (o dopo la ripresa) è usare il sistema init systemd. Ciò è dovuto al fatto che il sistema init interagisce direttamente con il kernel e i sistemi di alimentazione. Imparare a lavorare con questo strumento consentirà a qualsiasi utente di ottenere un grande controllo sul proprio sistema operativo Linux,

Ti preghiamo di comprendere che fare scherzi con il sistema di inizializzazione sul tuo PC può essere pericoloso se non sai cosa stai facendo. Assicurati di seguire le istruzioni di questo tutorial il più fedelmente possibile, per evitare possibili contrattempi.

Non tutte le moderne distribuzioni Linux supportano il sistema init systemd. Alcuni usano upstart o qualcos’altro interamente. In questo tutorial, ci concentreremo su systemd poiché è il sistema di avvio più comune. Se stai cercando di svolgere questa attività su qualcosa che non esegue ciò che trattiamo in questo articolo, considera la possibilità di consultare il manuale del tuo sistema operativo per le istruzioni.

Nota: gli utenti Debian dovrebbero sostituire tutte le istanze di usr / lib / systemd / system-sleep con / lib / systemd / system-sleep /

Esecuzione di un comando prima della sospensione

Per eseguire uno script prima della sospensione, posizionare qualsiasi file di script bash nella directory / usr / lib / systemd / system-sleep /. Gli script stessi possono fare qualsiasi cosa, ma c’è una certa sintassi che deve essere rispettata. Inizia aprendo una finestra di terminale. Usando sudo -s, ottieni una shell di root.

Quindi, attiva l’editor di testo nano all’interno della directory di sospensione del sistema:

nano /usr/lib/systemd/system-sleep/pre-suspend.sh

Aggiungi lo shebang all’inizio della sceneggiatura. L’aggiunta di questo è fondamentale e senza di essa l’interprete non sarà in grado di leggere correttamente il codice ei comandi.

#!/bin/bash/

La parte successiva della sceneggiatura è il “se”. Questo dirà al sistema di controllo dell’alimentazione che “se” il sistema sta per spegnersi per la sospensione, dovrebbe accadere qualcosa. Incolla il codice di seguito:

if [ "${1}" == "pre" ]; then
sh /path/to/script/to/run.sh

Cambia sh /path/to/script/to/run.sh nello script con quello che desideri eseguire sul tuo PC Linux (o server) subito prima che il sistema si arresti per la sospensione. Tieni presente che la riga immediatamente dopo “if” non deve essere sh /path/to/script/to/run.sh. Puoi anche usarlo per eseguire vari comandi. Finché bash può riconoscerlo come un comando, verrà eseguito.

L’ultima parte dello script “before suspend” consiste nell’aggiungere la parte “else if”. Questo aspetto dello script non ha bisogno di essere modificato, poiché, in questo esempio, siamo preoccupati di fare qualcosa prima che il sistema si arresti e non quando si riattiva.

elif [ "${1}" == "post" ]; then
# nothing goes here
fi

Quando tutto è stato aggiunto al file, premi Ctrl + O per salvare nano.

Esecuzione di un comando dopo il ripristino

L’esecuzione di un comando dopo la ripresa funziona in modo molto simile all’esecuzione di qualcosa prima della sospensione. L’unica vera differenza è che invece di aggiungere un comando dopo la parte “if” dello script, faresti che la parte più importante del codice si verifichi dopo la riga “elif”.

Per creare uno script post-curriculum, aggiungi innanzitutto lo shebang come prima riga.

#!bin/bash

Nella riga successiva, aggiungi la parte “if” dello script.

if [ "${1}" == "pre" ]; then
# nothing goes here

Con quel bit di codice incollato nello script bash, scorri verso il basso e incolla la sezione “else if”.

elif [ "${1}" == "post" ]; then
sh /path/to/script/to/run.sh
fi

Ancora una volta, va bene scrivere qualsiasi cosa sotto la riga “elif”. Finché è una normale operazione di comando systemd e bash lo eseguiranno.

Comandi in esecuzione all’avvio e al ripristino

Se desideri eseguire due comandi opposti; uno prima della sospensione e uno al ripristino, è possibile. Significa semplicemente personalizzare lo script e aggiungere righe sia sotto la riga “if” che sotto la riga “elseif”.

Come al solito, inizia inserendo la faccenda nella sceneggiatura per l’interprete.

#!/bin/bash

Successivamente, incolla la sezione if del codice.

if [ "${1}" == "pre" ]; then
# replace with command

In if, sostituisci “# replace with command” con qualsiasi comando che desideri eseguire prima che il sistema si arresti. Quindi, passa alla sezione “elif” e fai lo stesso.

elif [ "${1}" == "post" ]; then
#  replace with command
fi

Salva il file con Ctrl + O,

Aggiornamento delle autorizzazioni e utilizzo dello script

Tutti i comandi necessari si trovano all’interno del file di script, ma prima che possa essere eseguito, dovrai aggiornare le autorizzazioni. Apri un terminale e ottieni il root con: su o sudo -s. Quindi fa:

chmod +x /usr/lib/systemd/system-sleep/pre-suspend.sh

D’ora in poi, ogni volta che sospendi o riprendi, i comandi personalizzati all’interno dello script dovrebbero essere eseguiti.

Nota: hai domande sulla sospensione del sistema di systemd? Controllare il manuale con man systemd-suspend.service.