Crontab-Uruchom w katalogu

Chciałbym ustawić zadanie, które będzie uruchamiane codziennie w głównej crontabie. Ale chciałbym, aby go uruchomić z określonego katalogu, aby mógł znaleźć wszystkie pliki, których potrzebuje, ponieważ aplikacja ma kilka ścieżek względnych.

W każdym razie, czy mogę powiedzieć crontabowi, aby działał z określonego katalogu?

Author: Jav_Rock, 2012-01-17

2 answers

Wszystkie zadania są wykonywane przez powłokę, więc uruchom ten fragment powłoki poleceniem zmiany katalogu.

cd /path/to/directory && ./bin/myapp

Odnośnie użycia && zamiast ;: normalnie nie robi to różnicy, ale jeśli polecenie cd nie powiedzie się (np. ponieważ katalog nie istnieje) z &&, aplikacja nie jest wykonywana, podczas gdy z ; jest wykonywana (ale nie jest w zamierzonym katalogu ).

 348
Author: Gilles 'SO- stop being evil',
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-05 11:27:07

Czytanie man 5 crontab powinno powiedzieć, że istnieje HOME zbiór zmiennych, który można przedefiniować w pliku. Staje się Twoim katalogiem roboczym. Możesz również ustawić PATH dla poleceń. Oczywiście wpływa to na wszystkie linie harmonogramu cron.

E. G.

Kilka zmiennych środowiskowych jest ustawianych automatycznie przez cron(8) daemon. SHELL jest ustawione na /bin/sh, a LOGNAME i HOME są ustawione od linia /etc/passwd właściciela crontabs. HOME i SHELL mogą być overridden by settings in crontab; LOGNAME nie może.

(Uwaga: zmienna LOGNAME jest czasami nazywana USER w systemach BSD i jest również ustawiana automatycznie).

W zależności od Twojego crona oczywiście, ale mój również ma MAILTO, MAILFROM CONTENT_TYPE, CRON_TZ, RANDOM_DELAY, i MLS_LEVEL.

Więc dla Twojej hipotetycznej aplikacji polecam nazwę pliku /etc/cron.d/hypothetical zawierającą:

# Runs hypothetical app @ 00:01Z in its local path for reading its config or something.
SHELL=/bin/sh
HOME=/where/the/app/is
PATH=/where/the/app/is:/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
CRON_TZ=UTC
1 0 * * * theappuser hypothetical --with arguments 

Na przykład z docker-compose oparciem na cwd docker-compose.yml:

SHELL=/bin/sh
HOME=/path/to/composed-app
5 5 * * * root docker-compose restart -t 10 service-name
 1
Author: dlamblin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-20 17:49:50