Jak skonfigurować zadanie cron, aby uruchamiało plik wykonywalny co godzinę?


95

Muszę skonfigurować zadanie cron, które co godzinę uruchamia plik wykonywalny skompilowany przy użyciu gcc.

Zalogowałem się jako root i wpisałem crontab -e

Następnie wprowadziłem następujące dane i zapisałem plik.

0 * * * *  /path_to_executable

Jednak zadanie cron nie działa.

Widzę, że kiedy piszę /...path_to_executable, pojawia się błąd segmentacji. Mogę uruchomić plik wykonywalny tylko z folderu, w którym się znajduje. Czy istnieje sposób rozwiązania tego problemu?


8
To zły tytuł. Wiesz, jak skonfigurować zadanie cron; chcesz wiedzieć, jak wykonać polecenie.
— David Thornley,

5
należy do superuser.com (niezwiązane bezpośrednio z programowaniem)
— Filip.

3
Niewłaściwy tytuł, ale tak znalazłem rozwiązanie.
— Roman Holzner

Twój plik wykonywalny prawdopodobnie został uruchomiony. Zalecam użycie syslog (3) wewnątrz niego (i przynajmniej zrobienie komunikatu dziennika na początku, aby mieć pewność, że został uruchomiony).
— Basile Starynkevitch

Odpowiedzi:


161
0 * * * * cd folder_containing_exe && ./exe_name

powinien działać, chyba że jest coś innego, co trzeba skonfigurować, aby program mógł działać.


11
użyj && zamiast;, w przeciwnym razie mogą się zdarzyć interesujące rzeczy (szczególnie gdy jest używane z rm)
— Reactormonk

4
Masz rację. && jest znacznie lepsze, jeśli istnieje szansa, że ​​cel CD nie istnieje (na przykład, jeśli katalog znajduje się na serwerze NFS, który jest wyłączony).
— joast

Uratuj mój dzień! Dzięki!
— Chiakie,

Zauważ, że potrzebujesz również ścieżki bezwzględnej (np. Z katalogu głównego)
— afaik

8

Rozwiązaniem tego problemu jest ustalenie, dlaczego pojawia się błąd segmentacji, i naprawienie go.


5

Możesz także użyć @hourlynatychmiastowego0 * * * *


ciekawi tego rozwiązania, w której minucie działa, czy @godzina oznacza 0?
— ojblass

1
@ojblass @hourlyto dokładny synonim 0 * * * *, nie ma różnicy.
— Marek Skiba

2

Czy chodziło Ci o to, że plik wykonywalny nie działa, jeśli jest wywoływany z innego katalogu? Jest to raczej błąd w pliku wykonywalnym. Jednym z potencjalnych powodów może być to, że plik wykonywalny wymaga niektórych bibliotek współdzielonych z zainstalowanego folderu. Możesz sprawdzić zmienną środowiskowąLD_LIBRARY_PATH



0

Ponieważ nie mogłem uruchomić Cpliku wykonywalnego w ten sposób, napisałem prosty, shell scriptktóry wykonuje następujące czynności

cd /..path_to_shell_script
./c_executable_name

Na liście zadań cron nazywam skrypt powłoki.


0

posługiwać się

path_to_exe >> log_file

aby zobaczyć wynik polecenia, można również przekierować błędy

path_to_exe &> log_file

również możesz użyć

crontab -l

by sprawdzić, czy Twoje zmiany zostały zapisane.


crontab -l pokazuje zadanie crona, kiedy loguję się jako root. Wypróbowałem plik log_file, ale jest pusty.
— Anonimowy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.