2010-09-03 3 views
39

Jak mogę przechowywać zmienne w moim pliku crontab? Rozumiem, że to nie jest powłoka, ale powiedz, że chcę mieć jakieś stałe, takie jak ścieżka do mojej aplikacji czy coś takiego?Zmienne w crontab?

Myśli?

Odpowiedz

68

W Vixie cron, która jest prawdopodobnie najczęstsza, można to zrobić prawie tak samo jak skrypt powłoki.

VARIABLE=value 
PATH=/bin:/path/to/doathing 
0 0 * * * doathing.sh $VARIABLE 

Strona człowiek mówi:

Aktywna linia w crontab będzie być albo ustawienie środowisko lub polecenia cron. Ustawienie zmiennej środowiska jest w postaci

 name = value 

gdzie przestrzenie wokół równych znaku (=) są opcjonalne, oraz wszelkie niesugerujące przestrzenie w wartości będzie częścią wartości przypisanej nazwy. Ciąg wartości może być umieszczony w cudzysłowie (pojedyncze lub podwójne, ale pasujące), aby zachować początkowe lub końcowe spacje. Łańcuch o nazwie można również umieścić w cudzysłowie (pojedyncze lub podwójne, ale pasujące), aby zachować początkowe, końcowe lub wewnętrzne spacje.

Możesz sprawdzić, czy masz Vixie cron, sprawdzając stronę podręcznika dla crontab; autorem będzie Paul Vixie. Różne crony mogą, ale nie muszą tego obsługiwać (na przykład cron BusyBoxa, nie), w takim przypadku najlepszą opcją jest zawarcie komendy w skrypcie powłoki i uruchomienie tego skryptu z crona. W rzeczywistości jest to dobre rozwiązanie dla wszystkiego, co skomplikowane.

+3

+1 To jest odpowiedź –

+0

Powróciłem, aby spojrzeć na to pytanie, które zadałem 3 lata temu. Zabawne, jak się sprawy mają, co? –

+12

Ten wpis jest mylący - cron obsługuje tylko określony zestaw zmiennych ustawianych w tabeli cron; na przykład HOME, MAILTO, SHELL itd. Nie możesz * ustawiać zmiennych niestandardowych, np. FOO =/foo/dir. Pomyślałem, że zamieściłbym to, ponieważ ten wpis doprowadził mnie do niewłaściwej drogi przez kilka godzin. – Jmoney38

-8

Nie jestem facetem z unixu, więc nie mogę powiedzieć, że byłbym zdecydowany, ale to brzmi jak dobre miejsce na krok przed procesem.

#define cmdpath /usr/bin/myfolder/cmd 
0,30 8-17 * * 1-5 cmdpath 
17 3 * * 1 cmdpath 

działa, że ​​dzięki moim C++ preprocesora kompilator daje jako:

0,30 8-17 * * 1-5 /usr/bin/myfolder/cmd 
17 3 * * 1 /usr/bin/myfolder/cmd 

Który Wygląda na to, czego chciał.

+11

Kiedy wszystko, co masz, to młotek, każdy problem wygląda jak gwóźdź. –

+2

To zmienia względny proces edycji pliku crontab z 'crontab -e' na trzyetapowy proces edycji pliku crontab, wywoływanie cpp i instalowanie nowego pliku crontab z crontab $ filename – mkb

+0

@Matt: a) to właśnie skrypty powłoki są dla, i b) ale 'crontab -e' nie robi tego, co chce, więc nie jest to naprawdę odpowiedź. –

2

Możesz umieścić zmienne środowiskowe w pliku crontab. Więcej informacji można znaleźć na stronie podręcznika dla crontab(5).