Cron i w

Konfiguracja serwerów, usług, itp.
nova_mara
Posty: 5
Rejestracja: 05 kwietnia 2009, 19:58

Cron i włączanie programów na serwerze skryptem

Post autor: nova_mara »

Witam wszystkich, jestem nowy na forum i nie całkiem ale w większym stopniu zielony w środowisku Linuksa (dopiero się uczę), znalazłem się tutaj bo mam pewien problem, a mianowicie posiadam serwer RPS z dostępem root, itd. Moim problemem jest ,,daemon CRON''. Już piszę o co chodzi.

Serwer jest skonfigurowany, wszystko śmiga elegancko, ale nie CRON.
Napisałem sobie 2 małe skrypty, które mają za zadanie podtrzymywać ciągłość pracy programu, więc zdefiniowałem sobie wszystko w plikach: program.sh i .program.sh oba te pliki znajdują się w folderze ROOT, zaś mój program znajduje się w folderze /home/program/

Zawartość pliku program.sh:

Kod: Zaznacz cały

#!/bin/bash
cd /home/program && ./program &
Zawartość pliku .program.sh:

Kod: Zaznacz cały

#!/bin/bash
if [ ! "$(ps ax | grep ./program)" ]; then sh ./program.sh ; fi
Jeden z plików ma sprawdzać co minutę czy dany program działa, a drugi w razie wyłączenia programu ma go jak najszybciej włączyć (w tym przypadku to włączenie ma nastąpić po 1 minucie).

Kontynuując, dodałem wpis do crona:

Kod: Zaznacz cały

0-59/1 * * * * sh ~/.program.sh
wpis dlatego w takiej postaci bo chcę żeby wszystko odbywało się co minutę.

Zapisałem zadanie i wylogowałem się, jednak minęła godzina (gdzie powinno to się stać po minucie), a program dalej się nie włączył.

Bardzo ale to bardzo proszę o pomoc, bo ja już próbowałem wszystkiego. Wdzięczny bym był za jasne wytłumaczenie, bo jak już wcześniej wspomniałem, za dobry w te klocki to ja nie jestem.

Dziękuję z góry za wszelką pomoc oraz pozdrawiam.
fnmirk
Senior Member
Posty: 8321
Rejestracja: 03 grudnia 2007, 06:37

Post autor: fnmirk »

nova_mara, jakbyś zerknął wcześniej do dostępnych tematów na forum to natknąłbyś się na takie rozwiązania.
http://debian.linux.pl/viewtopic.php?t=12033
http://debian.linux.pl/viewtopic.php?t=13415
http://debian.linux.pl/viewtopic.php?t=13985

Hasło do wyszukiwarki na forum: cron+skrypt
Opcja ,,Szukaj'' na forum.
nova_mara
Posty: 5
Rejestracja: 05 kwietnia 2009, 19:58

Post autor: nova_mara »

fnmirk dziękuję za podesłanie linków i zmianę nazwy tematu, ale ja to już wypróbowałem, niestety bez skutku. Skrypty posiadam swoje, które działają na innej maszynie bez zarzutów. Moje pytanie bardziej ma drążyć w w problem, dlaczego na drugiej maszynie również z Debianem 4.0, program ten nie jest uruchamiany przez crona. Gdzie leży wina, w moim cronie, jak to można sprawdzić lub jeszcze lepiej naprawić?

Moje logi z pliku var/log/syslog

Kod: Zaznacz cały

Apr  6 00:52:01 r21677 /USR/SBIN/CRON[16257]: (root) CMD (sh ~/.program.sh)
Apr  6 00:53:01 r21677 /USR/SBIN/CRON[16267]: (root) CMD (sh ~/.program.sh)
Apr  6 00:54:01 r21677 /USR/SBIN/CRON[16257]: (root) CMD (sh ~/.program.sh)
Apr  6 00:55:01 r21677 /USR/SBIN/CRON[16267]: (root) CMD (sh ~/.program.sh)
Apr  6 00:56:01 r21677 /USR/SBIN/CRON[16257]: (root) CMD (sh ~/.program.sh)
Apr  6 00:57:01 r21677 /USR/SBIN/CRON[16267]: (root) CMD (sh ~/.program.sh)
Widać, że cron usiłuje podnieść program, ale on nie działa wcale, przynajmniej ja tak wnioskuję z tego co widzę, na drugiej maszynie logi są identyczne i program wstaje dokładnie po minucie w przypadku kiedy się wyłączył, a na ten drugiej za cholerę nie chce się podnieść. Ma ktoś jeszcze jakieś propozycje? Bo mi się pomysły skończyły. Proszę o pomoc.
Ister
Junior Member
Posty: 566
Rejestracja: 05 marca 2009, 12:42

Post autor: Ister »

Przychodzą mi na myśl dwie rzeczy - po pierwsze sprawdź, czy skrypt odpalony "z palca" zadziała tak jak powinien.
Po drugie - może lepiej użyć ścieżek bezwzględnych?
Trudno mi oceniać, ale chyba nie zaszkodzi spróbować?
nova_mara
Posty: 5
Rejestracja: 05 kwietnia 2009, 19:58

Post autor: nova_mara »

Z palca działa idealnie, wszystko w 100%, ale cron go nie chce podnieść. Oto co jest w konsoli jak uruchomię z palca:

Kod: Zaznacz cały

root     20893  0.0  0.4   7696  2364 ?        Rs   15:37   0:00 sshd: root@pts/0
root     20897  0.0  0.3   4172  1640 pts/0    Ss   15:37   0:00 -bash
root     20906  0.0  0.1   3852   612 pts/0    S    15:38   0:00 /bin/bash ./program.sh
root     20907  0.7  0.4  12980  2376 pts/0    Sl   15:38   0:00 ./program
Szczególnie zaciekawiło mnie to ustawienie:

Kod: Zaznacz cały

root     20906  0.0  0.1   3852   612 pts/0    S    15:38   0:00 /bin/bash ./program.sh
bo przecież ja mam w ustawieniach etc/crontab:

Kod: Zaznacz cały

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

[b][color=red]SHELL=/bin/sh[/color][/b]
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
21 6 * * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Czy to jest aby dobrze? Czy ktoś mógłby sprawdzić to w praktyce, mogę podać hasło root i hostname, tylko żeby ktoś to sprawdził, czy wszystko jest w porządku i poprawił nieprawidłowości.

A co do tych ścieżek bezwzględnych, mógłby mi ktoś to wytłumaczyć dokładnie, lub po dostaniu roota ustawić, wszystko jak powinno być.
panel
Beginner
Posty: 103
Rejestracja: 13 marca 2009, 21:07

Post autor: panel »

Jako jedyny masz możliwość porównania skryptów z tego działającego crona i z tego niedziałającego.
U mnie jest to skrypt w /etc/cron.d z uprawnieniami do wykonywania.
Wygląda jakoś tak:

Kod: Zaznacz cały

#!/bin/bash
00 * * * * root zadanie
Ister
Junior Member
Posty: 566
Rejestracja: 05 marca 2009, 12:42

Post autor: Ister »

Forum jest też po to, żeby ktoś inny mógł się dowiedzieć jak coś zrobić, kiedy już znajdziemy rozwiązanie.

Zastąp tyldę (~) ścieżką do katalogu roota (zapewne /root).
Generalnie - ścieżki bezwzględne to takie, które zaczynają się od / . Wszystko inne to ścieżka bardziej lub mniej względna. ¦cieżka zaczynająca się od ~ zależy od katalogu domowego uruchamiającego. Teoretycznie uruchamiając jako root powinno być dobrze. No ale teoria teorią... ;-)
RaV.
Posty: 87
Rejestracja: 28 czerwca 2006, 15:30
Lokalizacja: 127.0.0.1

Post autor: RaV. »

Tak jak zauważył Ister, cronowi podawaj zadania jako pełne ścieżki. To powinno rozwiązać dużą część Twoich problemów. Nawet Twoje logi Ci o tym mówią. Jesteś pewien, że cron ma swój katalog domowy?
nova_mara pisze:Apr 6 00:56:01 r21677 /USR/SBIN/CRON[16257]: (root) CMD (sh ~/.program.sh)
Apr 6 00:57:01 r21677 /USR/SBIN/CRON[16267]: (root) CMD (sh ~/.program.sh)
nova_mara
Posty: 5
Rejestracja: 05 kwietnia 2009, 19:58

Post autor: nova_mara »

No więc tak też zrobiłem, jak polecił Ister, zamieniłem we wpisie cron tyldę na ścieżkę /root, efektem jest to co do tej pory, brak jakichkolwiek zmian w działaniu programu.

Teraz mój wpis w cron wygląda tak:
0-59/1 * * * * sh /root/.program.sh
A logi z /var/log/syslog wyglądają następująco:
Apr 6 19:14:01 r21677 /USR/SBIN/CRON[21907]: (root) CMD (sh /root/.program.sh)
Apr 6 19:15:01 r21677 /USR/SBIN/CRON[21967]: (root) CMD (sh /root/.program.sh)
Apr 6 19:16:01 r21677 /USR/SBIN/CRON[21972]: (root) CMD (sh /root/.program.sh)
Apr 6 19:17:01 r21677 /USR/SBIN/CRON[21978]: (root) CMD (sh /root/.program.sh)
Apr 6 19:17:01 r21677 /USR/SBIN/CRON[21979]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 6 19:18:01 r21677 /USR/SBIN/CRON[21985]: (root) CMD (sh /root/.program.sh)
Apr 6 19:19:01 r21677 /USR/SBIN/CRON[21985]: (root) CMD (sh /root/.program.sh)
Apr 6 19:20:01 r21677 /USR/SBIN/CRON[21985]: (root) CMD (sh /root/.program.sh)
Może jednak ktoś by mógł zalogować się na moją maszynę i sprawdzić po swojemu co i jak, bo ja jak wcześniej o tym wspomniałem, nie jestem za dobry w te klocki. Ale zanim ja rozwiąże ten problem to okres dzierżawy mi się skończy :-|
RaV.
Posty: 87
Rejestracja: 28 czerwca 2006, 15:30
Lokalizacja: 127.0.0.1

Post autor: RaV. »

Ajajaj... To przeedytuj jeszcze raz:

Kod: Zaznacz cały

0-59 * * * * /bin/sh /root/program.sh
chyba, że faktycznie program.sh jest ukrytym plikiem. Wówczas, tak na wszelki:

Kod: Zaznacz cały

0-59 * * * * /bin/sh /root/.program.sh
W zależności od tego, które polecenie zadziała, wydane spod konsoli:
/bin/sh /root/program.sh
czy
/bin/sh /root/.program.sh

Kolejny edit:
W ogóle co to za pomysł, żeby tak intuicyjnie nazywać skrypt "program.sh", wrzucać je do różnych katalogów... Namieszałeś tym zdrowo.
W cronie podajesz *pełną* ścieżkę do sprawdzacz.sh (tak sobie umownie nazwijmy skrypt, który sprawdza, czy proces "program.sh" śmiga.
Kod "sprawdzacz.sh", też bym zamienił na ścieżki bezwzględne, bo to, co działa dla użytkownika, który ma poustawiane zmienne środowiskowe, nie koniecznie zadziała w cronie.
ODPOWIEDZ