cykliczny skrypt z cron'a - nie dziala jak powinien

Tylko tematy nie mieszczące się powyżej.
WombaT
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 15 sty 2006, 22:10
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: WombaT »

Witam,

Napisalem sobie takie cos:

Kod: Zaznacz cały

#!/bin/sh
date >> /home/wombat/Pulpit/lcc.log
smartctl -d ata -a /dev/sda | grep Temperature >> /home/wombat/Pulpit/lcc.log
echo "------------\/-------------" >> /home/wombat/Pulpit/lcc.log
jezeli plik wywolam recznie, czyli np:

Kod: Zaznacz cały

sudo sh lcc.sh
to dziala wg moich oczekiwan czyli tworzy plik lcc.log z taka zawartoscia:

Kod: Zaznacz cały

nie, 7 wrz 2008, 13:13:53 CEST
190 Airflow_Temperature_Cel 0x0022   063   044   045    Old_age   Always   In_the_past 37 (Lifetime Min/Max 37/37)
194 Temperature_Celsius     0x0022   100   100   000    Old_age   Always       -       37 (Lifetime Min/Max 21/56)
------------\/-------------
jest tak jak chce, ale jak dodam go do crontab'a:

Kod: Zaznacz cały

# m h  dom mon dow   command
  * * * * * /home/wombat/lcc.sh
uruchamianie ustawione co minute dla testow, docelowo bedzie co godzine.
Problem polaga na tym ze lcc.sh uruchomiony przez cron'a nie dziala jak powinien, zawartosc docelowego pliku wyglada tak:

Kod: Zaznacz cały

Sun Sep  7 13:17:01 CEST 2008
------------\/-------------
Czyli nie ma wpisow z smarta dysku. Co robie zle?
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: el.pescado »

Przypuszczam, że dodajesz polecenie do crona jako zwykły użytkownik, a nie jako root, przez co skrypt nie uruchamia się z uprawnieniami roota. Dla pewności, że edytujesz tablicę roota, możesz użyć

Kod: Zaznacz cały

sudo crontab -u root
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: DNADesigNed »

Zmodyfikuj wpis w crontab, żeby wyglądał w ten spsób i zobaczy czy działa:

Kod: Zaznacz cały

* * * * * root /home/wombat/lcc.sh
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
WombaT
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 15 sty 2006, 22:10
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: WombaT »

el.pescado pisze:Przypuszczam, że dodajesz polecenie do crona jako zwykły użytkownik, a nie jako root, przez co skrypt nie uruchamia się z uprawnieniami roota. Dla pewności, że edytujesz tablicę roota, możesz użyć

Kod: Zaznacz cały

sudo crontab -u root
edytuje crontab'a poleceniem

Kod: Zaznacz cały

sudo crontab -e
wiec chyba jako root - bo przez sudo, a to polecenie co podales to nie dziala wcale :P chyba ze dopisze -e na koncu ;]
DNADesigNed pisze:Zmodyfikuj wpis w crontab, żeby wyglądał w ten spsób i zobaczy czy działa:

Kod: Zaznacz cały

* * * * * root /home/wombat/lcc.sh
jak dodalem root to skrypt w ogole sie nie wykonywal :]
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: DNADesigNed »

To dziwne... u mnie takie rozwiązanie działa:

/etc/crontab:

Kod: Zaznacz cały

...
* * * * * root echo "`date` mark" >> /root/test.txt
...
Specjalnie do katalogu root'a, żeby było jasne, że z uprawnieniami nie ma problemów.

Kod: Zaznacz cały

root@dna-laptop:~# tail -f /root/test.txt
Sun Sep  7 18:29:01 CEST 2008 mark
Sun Sep  7 18:30:01 CEST 2008 mark
Sun Sep  7 18:31:01 CEST 2008 mark
Sun Sep  7 18:32:01 CEST 2008 mark
Jak widać sposób ten działa, więc być może coś jest nie tak z Twoim skryptem. BTW. Pytam tylko gwoli formalności żeby się upewnić: restartowałeś cron'a po tych zmianach? ;)
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
WombaT
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 15 sty 2006, 22:10
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: WombaT »

Przeprowadzilem mala probe:

Kod: Zaznacz cały

# m h  dom mon dow   command
#  * * * * * /home/wombat/lcc.sh
  * * * * * root echo "'date' mark" >> /root/test.txt
  * * * * * smartctl >> /home/wombat/Pulpit/test.txt
plik /root/test.txt nawet nie zostal utworzony, natomiast test.txt na pulpicie powstal, ale pusty.

Wyglada na to ze cron ma problemy z odpaleniem polecenia smartctl, co z tym mozna zrobic?
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: DNADesigNed »

Na początek mógłbyś przejrzeć zawartość plików /var/log/messages i /var/log/syslog w poszukiwaniu błędów w pracy cron'a. Szczególnie ten drugi Cię zainteresuje, ale w tym pierwszym też czasami jest coś ciekawego. :)
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: el.pescado »

1. spróbuj dopisać coś w stylu

Kod: Zaznacz cały

echo "$USER" >> /tmp/test.txt
do crona, żeby zobaczyć którego użytkownika uprawnienia są używane przy uruchamianiu skryptu
2. Spróbuj podać pełną ścieżkę do programu smartctl
3. Spróbuj przekierować wyjście błędów do jakiegoś pliku (dopisz 2>> /jakiś_plik.txt na koniec polecenia)
WombaT
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 15 sty 2006, 22:10
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: WombaT »

DNADesigNed pisze:Na początek mógłbyś przejrzeć zawartość plików /var/log/messages i /var/log/syslog w poszukiwaniu błędów w pracy cron'a. Szczególnie ten drugi Cię zainteresuje, ale w tym pierwszym też czasami jest coś ciekawego. :)
w messages podczas pracy crona nie ma nic nowego, natomiast w syslog jest takie cos:

Kod: Zaznacz cały

Sep  8 13:30:30 GUGUmobile crontab[7819]: (root) BEGIN EDIT (root)
Sep  8 13:30:36 GUGUmobile crontab[7819]: (root) REPLACE (root)
Sep  8 13:30:36 GUGUmobile crontab[7819]: (root) END EDIT (root)
Sep  8 13:31:01 GUGUmobile /usr/sbin/cron[6514]: (root) RELOAD (crontabs/root)
Sep  8 13:31:01 GUGUmobile /USR/SBIN/CRON[7829]: (root) CMD (/home/wombat/lcc.sh)
Sep  8 13:32:01 GUGUmobile /USR/SBIN/CRON[7841]: (root) CMD (/home/wombat/lcc.sh)
Sep  8 13:33:01 GUGUmobile /USR/SBIN/CRON[7853]: (root) CMD (/home/wombat/lcc.sh)
Sep  8 13:33:08 GUGUmobile crontab[7864]: (root) BEGIN EDIT (root)
Sep  8 13:33:15 GUGUmobile crontab[7864]: (root) REPLACE (root)
Sep  8 13:33:15 GUGUmobile crontab[7864]: (root) END EDIT (root)
pierwsze 3 i ostatnie 3 linijki to edycja crontab'a w celu wlaczenia/wylaczenia wykonywania skryptu. Bledow nie ma, a z tego co widze powyzsze zapisy to tylko potweirdzenie ze skrypt wykonywany jest z prawami root'a.

@el.pescado

na pierwszy punkt to chyba odpowiadaja powyzsze wpisy z syslog'a. Co do pelnej sciezki do smartctl, szczerze mowiac to nie mam badego pojecia jaka ona moze byc, jak to sprawdzic?
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: DNADesigNed »

Możesz sprawdzić poprzez wpisanie:

Kod: Zaznacz cały

locate smartctl
Muszę przyznać, że Twój cron zachowuje się dość dziwnie. Rozumiem, że używasz Ubuntu 8.04 i cron'a, który instalowany jest domyślnie? Bo szczerze mówiać to nie podoba mi się już pierwsza linijka z Twojego crontab'a (tak, ta zakomentowana), brak tam kolumny "user". :/
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: el.pescado »

Można prościej:

Kod: Zaznacz cały

which smartctl
EDIT:
nie podoba mi się już pierwsza linijka z Twojego crontab'a (tak, ta zakomentowana), brak tam kolumny "user". :/

Kod: Zaznacz cały

man 5 crontab
Tylko plik /etc/crontab na kolumnę user. Reszta plików nie ma.
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: DNADesigNed »

el.pescado pisze:

Kod: Zaznacz cały

man 5 crontab
Tylko plik /etc/crontab na kolumnę user. Reszta plików nie ma.
No to miło nam, że nie powiedziałeś odrazu, że używasz crontab'a zwykłego użytkownika, a nie korzystasz z globalnego /etc/crontab. Przynajmniej teraz cały problem nabiera sensu... Do rzeczy:

Kod: Zaznacz cały

* * * * * sudo sh /home/wombat/lcc.sh
Widocznie smartctl do wykonania operacji, którą chcesz zrobić (jeżeli nie wszystkich) wymaga uprawnień root'a, a co za tym kawałkiem skryptu idzie, będziesz musiał zdjąć opcję wpisywania hasła w /etc/sudoers, jeżeli jeszcze tego nie zrobiłeś.
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: el.pescado »

że używasz crontab'a zwykłego użytkownika
Po pierwsze nie ja;) a po drugie, edytując crontab poleceniem

Kod: Zaznacz cały

sudo crontab -e
edytuje się tablicę roota, więc na jedno wychodzi.
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: DNADesigNed »

el.pescado pisze:a po drugie, edytując crontab poleceniem

Kod: Zaznacz cały

sudo crontab -e
edytuje się tablicę roota, więc na jedno wychodzi.
Nie do końca, ponieważ polecenie, o którym mówisz edytuje plik crontab użytkownika root, a nie plik /etc/crontab (to nie to samo). Dlatego też umieszczanie w nim kolumny z użytkownikiem nie zadziałało. Działania, które prezentowałem odbywały się na poziomie tylko i wyłącznie /etc/crontab, a nie lokalnego pliku crontab dla użytkownika.

Czyli teraz tak, zakładając, że użyjemy crontab'a użytkownika root (i niech już tak zostanie dla świętego spokoju, bo problem się komplikuje bardziej niż powinien), wystarczy, że w crontab'ie umieścisz wpis:

Kod: Zaznacz cały

* * * * * sh /home/wombat/lcc.sh
I problem powinien zniknąć. ;)

Swoją drogą WombaT się coś nie odzywa, pewnie my się tutaj kłócimy (mając z resztą na myśli ten sam rezultat, żeby uruchomić skrypt jako root), a on już ma problem rozwiązany. :D
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
WombaT
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 15 sty 2006, 22:10
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: WombaT »

nie nie nie, problem jest dalej, WombaT nie mial czasu na przyjemnosci dzis ;D

do rzeczy, edytuje crontab'a poleceniem

Kod: Zaznacz cały

sudo crontab -e
bo tak wyczytalem tu:

https://help.ubuntu.com/community/CronHowto

ale, nie doczytalem do konca, a mianowicie do czesci
Advanced Crontab
wnioskuje z niej ze powinienem edytowac plik /etc/crontab ale jest to niezalecane wiec lepiej uzyc /etc/cron.d

Ale tu pytanie, czy w przypadku uzycia cron.d, do tego katalogu wklejam plik o nazwie root - bo takim 'userem' chce odpalic skrypt, a w srodku linijke z cron'a ?

Czy pozostac przy cron'ie uzytkownika?

szczerze mowiac to poplatane to zdeka, nie dociera do mnie ten caly podzial na cron uzytkownika itd ;p
Awatar użytkownika
DNADesigNed
Sędziwy Jeż
Sędziwy Jeż
Posty: 84
Rejestracja: 30 sie 2007, 17:01
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: LXDE
Architektura: x86
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: DNADesigNed »

Już tłumaczę. :) Generalnie w katalogu /etc/cron.d umieszczasz plik o dowolnej nazwie, który swoją strukturą będzie przypominał oryginalny /etc/crontab. Innymi słowy plik /etc/cron.d/lcc mógłby wyglądać tak:

Kod: Zaznacz cały

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

* *  * * *  root  sh /home/wombat/lcc.sh
Czyli zasadniczo to samo, co wpisałbyś w /etc/crontab (łącznie ze zmiennymi środowiskowymi, ale ten standardowy zestaw powinien wystarczyć). Mechanizm ten powstał właśnie po to, żeby zapobiec utracie swoich wpisów w /etc/crontab podczas aktualizacji systemu/pakietów.

Z kolei magiczne polecenie crontab -e tworzy lub edytuje lokalny plik crontab dla użytkownika, który wywołał to polecenie. Zadania z lokalnych plików crontab są zawsze wywoływane z uprawnieniami użytkownika, do którego dany plik crontab należy, stąd też nie trzeba podawać nazwy użytkownika przed poleceniem. I to mnie zmyliło wcześniej. ;)
Pozdrawiam
Piotr "MoroS" Mrożek - http://dnadesign.pl/
WombaT
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 15 sty 2006, 22:10
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME
Kontakt:

Odp: cykliczny skrypt z cron'a - nie dziala jak powinien

Post autor: WombaT »

Sukces! Dziala wszystko jak nalezy, problem lezal w skrypcie, pomogla zmiana z

Kod: Zaznacz cały

smartctl
na

Kod: Zaznacz cały

/usr/sbin/smartctl

;) dzieki za pomoc

edit:
no i dziala oczywiscie z lokalnego pliku usera, czyli po poleceniu

Kod: Zaznacz cały

sudo crontab -e
ODPOWIEDZ

Wróć do „Inne”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości