Puncte:0

Lucrare Cron pentru a opri când AC este deconectat și nu funcționează

drapel in

Încerc să rulez un script bash simplu care îmi oprește notebook-ul dacă nu este conectat la AC cu o lucrare cron.

Scriptul meu este următorul:

#!/bin/bash

dacă ! on_ac_power; atunci 
    oprire          
fi

Și am configurat cron să-l ruleze în fiecare minut astfel:

*/1 * * * * /home/user/Documents/script.sh

Scriptul funcționează bine dacă îl rulez manual, dar în rest, pare să nu aibă niciun efect sub cron.

Ce îmi lipsește aici?

drapel cn
Cron nu este instrumentul corect pentru asta. Ceea ce vrei este un serviciu. ce este `on_ac_power`? nu dă nimic când este pe ac și când nu este pe ac așa că pare inutil pentru asta. Și poweroff aș adăuga un director în care.
drapel in
@Rinzwind `on_ac_power` testează dacă computerul funcționează pe linie. Adăugați un director pentru oprire, cum așa? După cum am spus, scriptul funcționează bine dacă îl rulez manual, dar cron pare să nu îl ruleze.
drapel us
În afară de comentariul anterior, `poweroff` ar trebui să necesite privilegii de root; `sudo poweroff` poate funcționa dacă utilizatorului în cauză nu i se cere să introducă o parolă. Mai bine, puneți intrarea cron în `/etc/crontab` și specificați că va fi executat ca `root` (desigur, scriptul ar trebui mutat și într-o locație sensibilă în acest caz).
Soren A avatar
drapel mx
@MarkusUeberall nu folosește niciodată `sudo` în scriptys și niciodată în lucrurile care trebuie să fie rulate în cron !! În schimb, rulați scriptul în cronul root, dacă este necesar.
Soren A avatar
drapel mx
@MarkusUeberall apropo, `poweroff` (/usr/sbin/poweroff) îi place /bin/systemctl wgich poate fi executat de oricine, deci `sudo` nu este necesar oricum.
drapel us
@Soren A: `/bin/systemctl` _poate_ fi executat de oricine, dar executarea `poweroff` ca utilizator non-root nu va funcționa neapărat dacă alți utilizatori sunt conectați (vezi `poweroff -i`, pe care de fapt am uitat să-l fac menționați mai sus); `sudo poweroff` _intotdeauna_ funcționează imediat.
Soren A avatar
drapel mx
@MarkusUeberall .. dar `sudo` nu funcționează în crontab ... scriptul trebuie să fie rulat în cronul root. Iar pentru utilizatorii autentificați, rareori există mai mult de un utilizator conectat pe sistemele de acasă . dar bineînțeles un punct de care trebuie să fii conștient de sistemele mai mari.
drapel us
@soren Un `sudo` _does_ funcționează în crontab atâta timp cât nu trebuie să introduceți o parolă (consultați, de exemplu, https://askubuntu.com/questions/796617/how-to-avoid-password-request-for-sudo -pentru-crontab-script-uri); dacă este o idee bună să-l folosiți pentru cazul de utilizare al OP este o altă întrebare (vezi comentariile anterioare care indică un serviciu și `/etc/crontab` care se adresează acestui lucru).
James S. avatar
drapel de
Vă rugăm să clarificați, în întrebarea dvs. de mai sus, comanda completă pe care o executați atunci când executați comanda manual, precum și rezultatul de la ls care arată permisiunile sistemului de fișiere ale scriptului.
Puncte:1
drapel in

În primul rând, nu îmi rulam cron-ul sub root.

Aparent, pentru ca un cron să ruleze sub root, trebuie să îl adăugați sudo crontab -e, orice adăugat doar cu crontab -e nu va rula ca sudo.

În al doilea rând, așa cum se arată în referință:

cron rulează implicit într-un mediu foarte limitat, așa că o mulțime de comenzi care rulează prin numele comenzii de la un terminal al utilizatorilor trebuie să acceseze calea completă într-un crontab sau o declarație la începutul crontab pentru a extinde calea.

Așa că am ajuns să înlocuiesc oprire de /sbin/shutdown în scriptul meu, iar acum rulează așa cum era de așteptat.

#!/bin/bash

dacă ! on_ac_power; 
atunci 
    /sbin/shutdown        
fi

Referinţă

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.