[Megoldva] Időzítő bash script és cron

Kicsit agyaltam és lehet, hogy túlgondoltam az egészet. Majd ti megmondjátok, hogy hülye vagyok. Mindegy. Működik a következő script és crontab kombó a következő beállításokkal?

Hétfőn 20-kor leáll keddtől-csütörtökig 18-kor leáll, pénteken 16-kor leáll és minden hétköznap reggel 7.30-kor bekapcsol.

#!/bin/bash

current_day=$(date +%u)  # A hét napjának számát tároljuk el (1-7, hétfőtől vasárnapig)

case $current_day in
    1)  # Hétfő
        wake_after_minutes=690
        ;;
    [2-4])  # Kedd, Szerda, Csütörtök
        wake_after_minutes=810
        ;;
    5)  # Péntek
        wake_after_minutes=3810
        ;;
    *)  # Egyéb napokon
        wake_after_minutes=0
        ;;
esac

sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"
sh -c "echo $(date '+%s' -d "+ $wake_after_minutes minutes") > /sys/class/rtc/rtc0/wakealarm"
shutdown -h now

És a crontab:

0 20 * * 1

0 18 * * 2-4

0 16 * * 5

Működhet a dolog?

Hozzászólások

Nem lenne egyszerubb siman a crontab -ba tenni rogton a shutdown parancsot? ott mar szepen napok szerint van szortirozva amugy is, megsporolnal egy felesleges bonyolult script-et.

Igazából a kikapcsolás csak egy sor. A bonyolultabb része a bekapcsolás időzítése. Hisz minden nap más perccel kell bekapcsolnia a kikapcsolás után.

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick

Olyan nem lehet, hogy valaki tulorazik, bent marad tovabb, es kilovod alola a gepet? Talan egy hatterben futo scriptet hasznalnek inkabb erre, ami megnezi hasznaljak-e tavolrol, illetve vegigpingeti a LAN-t, es ha nem kell mar, akkor x ido mulva leall. A wakealarmot meg akkor, kozvetlenul a shutdown elott adnam ki az akkor kiszamitott ertekkel.

A strange game. The only winning move is not to play. How about a nice game of chess?

Hát ez is egy megoldás, de ezt nem biztos, hogy le is tudnám programozni... Én csak hobbista vagyok. Egy kis bash/python scriptet még megírok, de komolyabb összetett dolgot még nem írtam. Bár az alapjait szerintem meg tudnám csinálni pythonban egy egyszerű response függvény segítségével, de tenni kellene bele hibakeresést, kivételkezelést, stb és ha ez működik, akkor nem piszkálom.

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick

Szerkesztve: 2023. 11. 15., sze – 09:23

Valahol benézek valamit. Segítsetek kérlek!

A script:

# cat /usr/local/bin/shutwake
#!/bin/bash 
sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm" 
sh -c "echo `date '+%s' -d '+ 7 minutes'` > /sys/class/rtc/rtc0/wakealarm" 
shutdown -h now

A cron-ba a következőképp helyeztem el:

00 10 * * * /usr/local/bin/shutwake

Vagyis ma 11-kor fusson le.

Le is fut. Vagyis egy része. Pontosabban a megadott időpontban bekerül a /sys/class/rtc/rtc0/wakealarm állományba egy unix epoch szám. (Ez egy órával kevesebb mondjuk a helyi időzónánál, de szerintem ez most mindegy.) Viszont az utolsó sor, nevezetesen a kikapcsolás nem fut le. Mert a gép nem kapcsol ki. Ha belépek a könyvtárba és ott futtatom ./wakealarm paranccsal hibátlanul kikapcsol, majd bekapcsol. De ha ugyanezt cron-ból csinálom akkor nem kapcsol ki.

Miért?

Szerk. Ez még hasznos infó lehet:

# ls -l /usr/local/bin/shutwake
-rwxr-xr-x 1 root root 153 Nov 14 11:24 /usr/local/bin/shutwake

“The basic tool for the manipulation of reality is the manipulation of words. If you can control the meaning of words, you can control the people who must use them.”

― Philip K. Dick

Ha nem a szokasos kornyezettel es felhasznaloval futtatok egy scriptet, bele szoktam tenni egy olyat debug idejere, ami kiteszi egy file-ba, hogy nala milyen kornyezet latszik. Pl: set >/valami/filenev

A shutdown-hoz root jog kell. A cron ugy emlekszem tud rootkent futtatni scripteket, de ez be van allitva? (Lehet sudo-zni is.)

A unix timestamp UTC-ben fut, a helyi idozonat, teli-nyari atallast es effeleket utolag adjak hozza. Most UTC+1-ben vagyunk.

A strange game. The only winning move is not to play. How about a nice game of chess?