Sådan køres scripts og kommandoer under suspendering og genoptagelse på Linux

Den bedste måde at køre scripts og kommandoer på suspendering og genoptagelse på Linux før suspendering (eller efter genoptagelse) er at bruge systemd init-systemet. Dette skyldes det faktum, at init-systemet interagerer direkte med kernen og strømsystemer. At lære at arbejde med dette værktøj vil give enhver bruger mulighed for at få meget kontrol over deres Linux-operativsystem,

Forstå venligst, at det kan være farligt at rode med init-systemet på din pc, hvis du ikke ved, hvad du laver. Sørg for at følge instruktionerne i denne vejledning så nøje som muligt for at undgå eventuelle uheld.

Ikke alle moderne Linux-distributioner understøtter systemd init-systemet. Nogle bruger opkomling eller noget helt andet. I denne tutorial vil vi fokusere på systemd, da det er det mest almindelige initieringssystem. Hvis du ønsker at udføre denne opgave på noget, der ikke kører, hvad vi dækker i denne artikel, kan du overveje at se i dit operativsystems manual for at få instruktioner.

Bemærk: Debian-brugere bør erstatte alle forekomster af usr/lib/systemd/system-sleep med /lib/systemd/system-sleep/

Kørsel af en kommando før suspendering

For at køre et script før suspendering skal du placere en hvilken som helst bash script-fil i mappen /usr/lib/systemd/system-sleep/. Scriptet kan i sig selv alt, men der er en vis syntaks, der skal overholdes. Start med at åbne et terminalvindue. Brug sudo -s, få en rodskal.

  Sådan opsætter du en uTorrent-server på Linux

Derefter skal du op i nano-teksteditoren inde i system-sleep-mappen:

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

Tilføj shebang til starten af ​​scriptet. Det er vigtigt at tilføje dette, og uden det vil tolken ikke være i stand til at læse koden og kommandoerne korrekt.

#!/bin/bash/

Den næste del af scriptet er “hvis”. Dette vil fortælle strømstyringssystemet, at “hvis” systemet er ved at gå ned til suspendering, skulle der ske noget. Indsæt koden nedenfor:

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

Skift sh /path/to/script/to/run.sh i scriptet til det, du gerne vil køre på din Linux-pc (eller server), lige før systemet går ned til suspendering. Husk, at linjen direkte efter “hvis” ikke behøver at være sh /path/to/script/to/run.sh. Du kan også bruge dette til at udføre forskellige kommandoer. Så længe bash kan genkende det som en kommando, vil det køre.

  4 bedste videoafspillere til Linux

Den sidste del af “before suspend”-scriptet er at tilføje “else if”-delen. Dette aspekt af scriptet behøver ikke at blive ændret, da vi i dette eksempel er bekymrede for at gøre noget, før systemet går ned, og ikke når det vågner op igen.

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

Når alt er blevet tilføjet til filen, skal du trykke på Ctrl + O for at gemme nano.

Kørsel af en kommando efter genoptagelse

At udføre en kommando efter genoptagelse fungerer meget som at køre noget før suspendering. Den eneste reelle forskel er, at i stedet for at tilføje en kommando efter “hvis”-delen af ​​scriptet, vil du få den vigtigste del af koden til at opstå efter “elif”-linjen.

For at lave et post-cv-script skal du først tilføje shebang som den første linje.

#!bin/bash

På den næste linje skal du tilføje “hvis”-delen af ​​scriptet.

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

Med den bit kode indsat i bash-scriptet, flyt ned og indsæt “else hvis”-sektionen.

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

Endnu en gang er det OK at skrive hvad som helst under “elif”-linjen. Så længe det er en normal kommando operation, vil systemd og bash køre den.

  Sådan spiller du Subnautica på Linux

Kørende kommandoer ved opstart og genoptagelse

Hvis du gerne vil køre to modsatte kommandoer; en før suspendering og en ved genoptagelse, er det muligt. Det betyder blot at tilpasse scriptet og tilføje linjer under både “hvis”-linjen og “elseif”-linjen.

Begynd som sædvanligt med at poste shebang i manuskriptet til tolken.

#!/bin/bash

Indsæt derefter if-delen af ​​koden.

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

Under if, erstat “# replace with command” med den kommando, du vil køre lige før systemet går ned. Gå derefter til sektionen “elif”, og gør det samme.

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

Gem filen med Ctrl + O,

Opdatering af tilladelser og brug af scriptet

Alle de nødvendige kommandoer er inde i scriptfilen, men før den kan køre, skal du opdatere tilladelserne. Åbn en terminal, og få root med: su eller sudo -s. Så gør:

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

Fra nu af, når du suspenderer eller genoptager, skal brugerdefinerede kommandoer inde i scriptet køre.

Bemærk: har du spørgsmål om systemd system-sleep? Tjek manualen med man systemd-suspend.service.