Mam skrypt, który przypomina mi o ponownym uruchomieniu komputera, jeśli uptime
jest on dłuższy, powiedzmy 3 dni (chociaż jest ustawiony na 0 dni, aby sprawdzić, czy skrypt działa, ponieważ mój komputer działał tylko przez jeden dzień ...).
Zdaję sobie sprawę, że to nie jest najbardziej elegancki scenariusz, ale próbuję! :)
#!/bin/bash
up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')
[[ $up -gt 0 ]] && xmessage -center "Restart!"
Uczyniłem go wykonywalnym przez chmod + x checkup.sh
i działa dobrze, kiedy uruchamiam go z terminala przez./checkup.sh
Mój wpis crontab dla tego skryptu to:
46 14 * * * /home/username/Desktop/./checkup.sh
Działa więc o 14: 46hrs codziennie ...
Więc ... Myślę, że powinien działać, chyba że nie zrobiłem czegoś naprawdę głupiego. Czy uważasz, że przeniesienie tego skryptu bash jest w porządku /bin
?
/home/dnaneet/Desktop/./checkup.sh
działa poprawnie. Ale/home/dnaneet/Desktop/checkup.sh
może nie działać dobrze? Ponieważ potrzebuje./
?Odpowiedzi:
Jedna rzecz na raz:
Najpierw dajmy Ci folder bin oparty na użytkownikach:
Chcesz użyć crontab. Zacznijmy od czegoś naprawdę prostego:
Okej, więc to działa
Teraz spróbujmy uruchomić skrypt, który robi to samo
biegać raz na minutę, aż zacznie działać
Nie. Nie potrzebujesz ./ na środku linii. ./ służy do podawania względnych adresów URL.
Okej, więc to działa
Teraz spróbujmy uruchomić skrypt, który wywołuje xmessage
nie działa
Po pierwsze, nie musimy zależeć od zmiennych środowiskowych. Obejmuje to ustawienie ścieżki, ustawienia x11 lub cokolwiek innego (przychodzą na myśl zmienne środowiskowe python i ruby ...)
Spraw, by nasz wyglądał trochę jak właściwy plik cron anakrona. Zapisałem to jako test
Ustaw, aby uruchomić raz na minutę
crontab test
aby go zaimportowaćPrzejdź do skryptu
Okej, więc to działa ... co zrobiliśmy?
Zmieniliśmy wszystkie polecenia, aby nie zależały od ścieżek, których nie ustawiliśmy jawnie.
Uruchomiliśmy skrypt bezpośrednio z bash.
Powiedzieliśmy skryptowi, że spodziewamy się, że będzie on na WYŚWIETLACZU: 0.0
źródło
:-/
=
określeniu wierszaDISPLAY
. Po drugie, kiedy edytowałem mój plik crontab i dodałemPATH
zgodnie z sugestią i ustawiłem czas do uruchomienia w późniejszym czasie, okno wyskakujące nie było wyświetlane. Jednak wyskakujące okienko pokazywało się dobrze podczas uruchamiania skryptu przy użyciu/bin/bash
... co daje?export DISPLAY=:0.0
, działało dobrze. Chociaż był znaczący dźwięk około 5 sekund po tym, jak zegar wybił godzinę, w której moje okienko wyskakujące powinno było pokazać ... Jakieś sugestie? Ale tak, poprawiasz pracę nad skryptem!Problem został rozwiązany przeczytaj instrukcję w Google:
opis:
#!/bin/bash
jako nagłówka/home/wc3/palert/
analiza:
odpowiedź:
umieść swoje środowisko za pomocą poniższej linii w skrypcie z:
zmień to: za
/home/wc3/palert
pomocą: miejsca, w którym umieścisz skrypt, np
/home/budi/script.sh
próba:
Spróbuj umieścić skrypt na crontab.
źródło