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?

Anonimowy
źródło
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ć.

joast
źródło
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.

David Thornley
źródło
5

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

Marek Skiba
źródło
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

Jayan
źródło
2

Jeśli używasz Ubuntu, można umieścić skrypt w jednym z tych folderów: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlylub /etc/cron.weekly.

Więcej szczegółów znajdziesz w tym poście: /ubuntu/2368/how-do-i-set-up-a-cron-job

James Gentes
źródło
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.

Anonimowy
źródło
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.

jartieda
źródło
crontab -l pokazuje zadanie crona, kiedy loguję się jako root. Wypróbowałem plik log_file, ale jest pusty.
Anonimowy