Crontab - w

Ogólne pytania dotyczące systemu
radziwil
Posty: 38
Rejestracja: 09 marca 2009, 13:17

Crontab - włączanie skryptu co drugi poniedziałek

Post autor: radziwil »

Witam,
Jak ustawić Crontaba, aby uruchamiał skrypt co drugi poniedziałek np. o godz. 22:00? Zapis:

Kod: Zaznacz cały

0 22 * * 1/2 skrypt
jest zapisem nie poprawnym. Otrzymuję następujący komunikat:

Kod: Zaznacz cały

crontab: installing new crontab 
"/tmp/crontab.XXXXvzedho":14: bad day-of-week 
errors in crontab file, can't install.
Jak powinien wyglądać poprawny zapis?

Pozdrawiam

Darek
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post autor: lun »

Troszkę pośpieszyłem się z komentarzem, nie doczytując, że chodzi o co drugi poniedziałek w miesiącu.
Nie obędzie się bez użycia polecenia

Kod: Zaznacz cały

date
użytego w tablicy crontaba.
Postaram się napisać Ci jutro jak powinno to wyglądać.

Edyja:
Jednak jest to niełatwy przypadek.
Rozwiązanie, które znalazłem jest takie aby ustawić w cronie, aby skrypt uruchamiał się co poniedziałek, a wewnątrz skryptu umieszczasz warunek sprawdzający czy ten poniedziałek jest drugim w miesiącu.

Kod: Zaznacz cały

dow=`date +%a`
day=`date +%d`
if [ $dow != Mon -o \
$day -lt 8 -o \
$day -gt 14 ]
then
echo 'Will not run - not 2nd Monday'
exit
fi
echo 'This is 2nd Monday. Continuing ...'
radziwil
Posty: 38
Rejestracja: 09 marca 2009, 13:17

Post autor: radziwil »

Witam

Jeśli dobrze rozumiem Twoją propozycję, to w drugi poniedziałek miesiąca ma się wykonać jakiś skrypt. Natomiast mi zależy, aby dany skrypt wykonywał się co drugi poniedziałek, np. w tygodniu parzystym lub nie.

Kod: Zaznacz cały

nrtyg=`date +%V`
Sprawdzę, czy taki zapis będzie działał:

Kod: Zaznacz cały

if [ $(($nrtyg % 2)) -eq 0 ]
then
	skrypt1
else
	skrypt2
fi
Pozdrawiam

Darek
Awatar użytkownika
lun
Beginner
Posty: 266
Rejestracja: 01 lutego 2010, 22:06
Lokalizacja: Warszawa

Post autor: lun »

Nie do końca mnie dobrze zrozumiałeś, więc zacytuję sam siebie :
ustawić w Cronie, aby skrypt uruchamiał się co poniedziałek, a wewnątrz skryptu umieszczasz warunek sprawdzający czy ten poniedziałek jest drugim w miesiącu.
A kod wklejony poniżej pierwszego postu jest właśnie tym w/w warunkiem sprawdzającym. Wystarczy umieścić wewnątrz pętli skrypt do wykonania.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Krócej (dla nieparzystych):

Kod: Zaznacz cały

0 22 * * 1 expr `date +\%e` \% 2 >/dev/null || mojskrypt
Ew. dla parzystych poniedziałków:

Kod: Zaznacz cały

0 22 * * 1 expr `date +\%e` \% 2 >/dev/null && mojskrypt
W każdym razie chodzi o to, żeby sprawdzić czy modulo 2 z dnia tygodnia jest równe 0 czy 1 i odpowiednio uruchomić (lub nie) polecenie ;)
ODPOWIEDZ