Основываясь на этом ответе о переполнении стека , вы можете выполнить это с помощью следующего синтаксиса:
00 12 * * * test $(( $(date +\%s)/24/60/60\%45 )) = 20 && your_script
Это задание будет выполняться каждый день в полдень. Затем он вычисляет модуль количества дней от эпохи и проверяет, равен ли он указанному модулю. В этом случае я указал 20, что сделает его истинным на сегодняшний день (2018 -05 -09 между 00 :00 GMT и 23 :59 GMT ), затем 45 дней. с сегодняшнего дня и т. д. Вы можете рассчитать/проверить с помощью следующего:
$ echo $(( $(date +%s)/24/60/60%45 ))
20
$ echo $(( $(date -d '+45 days' +%s)/24/60/60%45 ))
20
$ echo $(( $(date -d '+44 days' +%s)/24/60/60%45 ))
19
(имейте в виду, что если вы не находитесь в часовом поясе UTC, вам, возможно, придется учитывать час дня ).
Синтаксис [[... ]]
недействителен для /bin/sh
. Попробуйте:
if [ -e /usr/src/an-existing-file ]
then
echo "seen" >> /etc/rclocalmadethis
fi
Обратите внимание, что иногда это работает, потому что /bin/sh -> /bin/bash
или какая-то другая оболочка, которая поддерживает этот синтаксис, но вы не можете полагаться на это (, как вы видите здесь ).
Вы можете запустить ls -l /bin/sh
, чтобы узнать эту информацию, например:
lrwxrwxrwx 1 root root 4 Jul 18 2019 /bin/sh -> dash
[[
— функция bash, недоступная вsh
:
root@d4b4b6325f2a:/# type [[
[[ is a shell keyword
root@d4b4b6325f2a:/# sh
# type [[
[[: not found
В таких обстоятельствах я бы, вероятно, посмотрел на тестовую команду.
/usr/bin/test -e /usr/src/an-existing-file && /bin/echo "seen" >> /etc/rclocalmadethis