2012-05-06 25 views
12

Spędziłem dwa dni próbując zrozumieć, dlaczego nie mogę dostać crona do pracy na mojej instancji Ubuntu EC2. Czytałem the documentation. Czy ktoś może pomóc? Wszystko, czego chcę, to uzyskać cronjob pracujący.Nie można pobrać crona do pracy z Amazon EC2?

Używam prostego polecenia wget do testowania crona. Mam dowód, że to działa ręcznie z wiersza poleceń:

/usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/

Mój plik crontab wygląda następująco:

02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/

mam pojedynczymi odstępami między poleceniami i mam pustą linię poniżej polecenia. Próbowałem również wykonać to polecenie z poziomu systemu sudo crontab -e. Nadal nie działa.

demon Cron jest uruchomiony:

ps aux | grep crond                             
ubuntu 2526 0.0 0.1 8096 928 pts/4 S+ 10:37 0:00 grep crond 

zadanie crona wydają się być uruchomione:

$ crontab -l 
02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/ 

Czy ktoś ma jakieś rady lub możliwych rozwiązań?

Dzięki za poświęcony czas.

+0

Czy ta pomoc: http://stackoverflow.com/questions/13204/why-doesnt-my-cron-job-work-properly –

+0

Chciałbym najpierw spróbować czegoś prostego, aby ocenić, czy problem leży w twoim poleceniu, czy w czymś else: tj. spróbuj umieścić: echo "xxx" >> /var/tmp/myfile.txt i sprawdź, czy uruchomiono go, sprawdzając /var/tmp/myfile.txt – maiklos

+0

@maiklos, czy działa twoje polecenie. – turtle

Odpowiedz

3

Nie zapomnij podać użytkownika, aby uruchomić go jako. Spróbuj utworzyć nowy plik w swoim folderze, nazwany tak jak chcesz: getnytimes i mieć zawartość tego pliku po prostu:

02 * * * * root/usr/bin/wget -O/home/ubuntu/backups/testfile http://www.nytimes.com/

+0

Ok, dzięki. Jak mam powiedzieć cronowi, aby "uruchomił" plik, gdy go utworzę? – turtle

+0

Wygląda na to, że cron powinien pobrać ten plik automatycznie po umieszczeniu go tutaj. Niestety nadal nie działa. – turtle

+1

Użytkownik nie jest niezbędny, jeśli używasz "crontab -e" - który otwiera edytor vi, w którym możesz edytować crontab dla bieżącego użytkownika. Format jest taki sam, jak root cromtab, ale bez użytkownika. A crontab zaczyna działać, gdy naciskam ZZ (lub: wq) na edytorze vi. Przykładowa linia cron do przetestowania jej działania: "* * * * */usr/bin/uptime>/tmp/uptime" – Druvision

19

Twój demon cron jest uruchomiony z nie. Gdy używasz ps aux | grep crond, wynik pokazuje, że działa tylko polecenie grep. Pamiętaj o tym za każdym razem, gdy uruchomisz ps aux | grep blah.

Sprawdź status usługi cron, wykonując to polecenie.

Spróbuj:

sudo service crond status 

Dodatkowe informacje tutaj: http://www.cyberciti.biz/faq/howto-linux-unix-start-restart-cron/.

+4

Gdyby moja crona nie działała (demon działał, ponieważ wysyłał następujący komunikat do log - 'FAILED, aby autoryzować użytkownika za pomocą PAM (moduł jest nieznany)'). Na podstawie tej odpowiedzi zrestartowano demona za pomocą '/etc/init.d/crond restart' i cron zaczął działać. –

+0

Restartowanie crond również zrobiło to za mnie. Nie wiem jednak, dlaczego przestało działać. Ktoś ma pomysł, gdzie szukać? Plik dziennika Cron nie pokazuje niczego interesującego. –

+1

Byłbym również zainteresowany znalezieniem właściwego rozwiązania "NIEPOWODZENIE, aby autoryzować użytkownika za pomocą PAM (moduł jest nieznany)" zamiast ponownego uruchamiania crona za każdym razem. Miałem to dość często. Naprawdę używam crona tylko dla logrotate, więc jeśli dysk zaczyna wypełniać pierwszą rzeczą, co zwykle robię, jest sprawdzenie błędu PAM. Chciałbym go rozwiązać, aby już się nie stało. – Jamiegs

23

Cron można uruchomić na serwerze linuksowym opartym na Amazonie, tak jak na każdym innym serwerze linuksowym.

  1. Zaloguj się do konsoli za pomocą SSH.
  2. Uruchom crontab -e w wierszu poleceń.
  3. Jesteś teraz wewnątrz edytora VI crontab bieżącego użytkownika (która jest domyślnie użytkownik konsoli z uprawnieniami roota)
  4. Aby przetestować crona, należy dodać następujący wiersz: * * * * * /usr/bin/uptime > /tmp/uptime
  5. Teraz zapisz plik i wyjdź z vi (naciśnij Esc i wprowadź: wq).
  6. Po minucie lub dwóch sprawdź, czy plik uptime został utworzony w/tmp (cat /tmp/uptime).
  7. Porównaj z bieżącym czasem pracy systemu, wpisując polecenie uptime w wierszu poleceń.

Powyższy scenariusz zadziałał pomyślnie na serwerze z zainstalowanym Amazon Linux O/S, ale powinien działać również na innych skrzynkach linuxowych. Modyfikuje to crontab bieżącego użytkownika, nie dotykając crontabów systemu i nie wymaga użytkownika wewnątrz wpisu crontab, ponieważ uruchamiasz rzeczy pod własnym użytkownikiem. Łatwiej i bezpieczniej!

+1

dodatkową wskazówkę, jeszcze raz krok 6, można też zrobić' tail -F/tmp/uptime' ('-F' oznacza, że ​​może zacząć oglądać przed plikiem) – hangtwenty

+0

Technicznie - F jest takie samo jak --follow = name --retry. Pierwsza opcja oznacza, że ​​może śledzić nowe pliki o tej samej nazwie pliku, jeśli pliki są obracane, a druga oznacza, że ​​będzie próbowała otworzyć plik, dopóki go nie znajdzie (tj. O czym wspomniałeś). –

0

działa

/usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/ 

daje mi błąd

/home/ubuntu/backups/testfile: No such file or directory 

jest to problem? Chyba cron nie pisze tego błędu gdziekolwiek można przekierować stderr do stdout i zobaczyć ten błąd tak:

02 * * * * /usr/bin/wget -O /home/ubuntu/backups/testfile http://www.nytimes.com/ > /home/ubuntu/error.log 2&>1 
0

W moim przypadku praca cron działa, ale skrypt nie powiodło został uruchomiony powiodło się. Przyczyną niepowodzenia było to, że użyłem ścieżki względnej zamiast ścieżki bezwzględnej w mojej linii include wewnątrz skryptu.