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.