Відповіді:
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand
date +%W
: число тижня року з понеділком як перший день тижня, сьогодні тиждень 39
10#$(date +%W)
: перетворіть у date +W
десяткове число та уникніть плутанини при розборі базової оболонки
$((39%2))
: модульна операція: результат 0 (парне число тижня) або 1 (непарне число тижня), результат цього тижня - 1, наступний тиждень 0
test 1 -eq 1
: арифметичний тест (рівний), в цьому випадку результат булевий
&& yourCommand
: Boolean AND: запускати yourCommand
лише якщо результат попередньої команди був булевим true
Зауважте, що рік може отримати два непарні тижні: 53 (цього року) та 1 (наступного року)
0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
$((10#$(date +%W)%2)) -eq 1 && echo OK
мої оболонки намагаються виконати результат обчислення тижня: -bash: 1: command not found
. Будь-яка підказка, чому це робить? Дякую.
test
немає користувача це команда ita . Спробуйте:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
Те, що ви показали, - "щотижня". Тоді код:
0 8 * * 6
Ви впевнені, що потрібно запускати його кожні два тижні?
0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand
echo $?
після запуску цієї команди, щоб побачити її код повернення - ось що важливо з нею