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/
Indholdsfortegnelse
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.
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.
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.
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.