linux: jak uruchomić polecenie w danym katalogu

16

Chcę po prostu uruchomić polecenie (właściwie skrypt powłoki) z danego katalogu jako zadanie crona. Jak mogę go uruchomić, aby był ustawiony na dany katalog bez użycia cd.

Zombie
źródło

Odpowiedzi:

16

Twoje pytanie nie ma sensu. Zastosowanie cd. Jeśli poprosisz o odpowiedź, której nie chcesz użyć, cdponieważ wypróbowałeś ją i nie zadziałała, prawdopodobnie nie wpisałeś jej poprawnie w crontab.

Najprostszym sposobem byłoby napisanie małego skryptu powłoki, który wykona cd i uruchomi główne zadanie, a następnie cron skryptu.

Daenyth
źródło
1
Czy crontab może pozwolić mi na umieszczenie wielu poleceń w jednym zadaniu? Jeśli nie, musiałbym kodować cd [ścieżka]. Ścieżka może się zmienić, powodując irytujące problemy z wdrażaniem, a także decentralizując konfigurację, której unikam za wszelką cenę.
Zombies
1
@Zombies: tak, możesz umieścić wiele poleceń w jednym zadaniu (np. Oddzielając je średnikami lub &&), ale możesz także napisać osobny skrypt, który zawiera wszystkie polecenia i po prostu umieścić ścieżkę do skryptu w cron, jak sugeruje Daenyth. Twój skrypt może zrobić coś takiego jak odczyt katalogu z pliku konfiguracyjnego, jeśli chcesz - chodzi o to, że jednak, jeśli chcesz wprowadzić nazwę katalogu do skryptu, nie jest to wymówka, aby go nie używać cd.
David Z
Widzę. Będę chciał użyć cd bezpośrednio na crontabie, ponieważ jeśli napiszę go w pliku, będę musiał go edytować w każdym pliku, co czyni konfiguracje delikatnymi / łatwymi do złamania.
Zombie
3
A jeśli umieścisz płytę CD w pliku crontab, będziesz musiał edytować ją w każdym pliku crontab. Nie rozumiem problemu. Może mógłbyś pełniej wyjaśnić, co próbujesz zrobić.
garyjohn
Innym powodem uruchomienia skryptu powłoki z pliku crontab jest upewnienie się, że środowisko jest ustawione poprawnie. Środowisko przydzielone do zadania cron jest zwykle ledwo nawet minimalne, więc zwykle musisz zresetować go do czegoś bardziej użytecznego.
Jonathan Leffler
60

Wystarczy podać ścieżkę do skryptu. Nie ma potrzeby cd:

0 12 * * * /path/to/script args

Jeśli twój skrypt szuka plików ., będziesz musiał użyć cd:

0 12 * * * cd /some/dir && /path/to/script args
Wstrzymano do odwołania.
źródło
2
Zobacz także serverfault.com/questions/290313/…
Will Sheppard
4
&&, jak w odpowiedzi na linki @WillSheppard do, byłoby lepiej niż ;ponieważ &&uruchamia następne polecenie tylko wtedy, gdy poprzednie polecenie zakończyło się powodzeniem.
Max Heiber,
1
@mheiber: naprawiono
wstrzymano do odwołania.