Можно ли использовать условные операторы в /etc/rc.local?

Основываясь на этом ответе о переполнении стека , вы можете выполнить это с помощью следующего синтаксиса:

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, вам, возможно, придется учитывать час дня ).

4
20.09.2020, 21:42
3 ответа

Синтаксис [[... ]]недействителен для /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
18
18.03.2021, 23:03

[[— функция bash, недоступная вsh:

root@d4b4b6325f2a:/# type [[
[[ is a shell keyword
root@d4b4b6325f2a:/# sh
# type [[
[[: not found
3
18.03.2021, 23:03

В таких обстоятельствах я бы, вероятно, посмотрел на тестовую команду.

/usr/bin/test -e /usr/src/an-existing-file && /bin/echo "seen" >> /etc/rclocalmadethis
-1
18.03.2021, 23:03

Теги

Похожие вопросы