bars писал: ↑04.04.2021 15:37
test `date +\%u` -eq 6 && sh /root/cloud_YD/saturday
Вот эта часть строчки это одна составная команда или однострочный скрипт
команда test в зависимости от оболочки может быть встроенной и не зависимо от оболочки внешней.
В задании crontab рекомендуется обычно использовать полные пути к командам. У меня работает и так, но
следующий вариант будет в приоритете, смотрим полный путь к внешним командам:
Shell
which test
/bin/test
which date
/bin/date
Изменяем:
Код: Выделить всё
/bin/test `/bin/date +\%u` -eq 6 && sh /root/cloud_YD/saturday
Команда test проверяет условие и возвращает значение true или false соответственно.
Shell
if true; then echo правда; fi
правда
if false; then :; else echo ложь; fi
ложь
Команда
date +%u выдает значение от 1 до 7 в зависимости от дня недели. Это значение мы и будем сравнивать с
воскресеньем(7)
-eq 7. Что бы команда выполнялась в подоболочке и возвращала значение в строку необходимо заключить ее в обратные кавычки, это наиболее совместимый способ, аналогичный конструкции
$(...)
Давайте смоделируем движение по дням недели:
И так:
Shell
for i in {1..7}; do
test `date -d+${i}day +%u` -eq 7 && echo сегодня воскресенье выполняем еженедельный скрипт
test `date -d+${i}day +%u` -eq 7 || echo сегодня не воскресенье выполняем ежедневные скрипт
done
сегодня не воскресенье выполняем ежедневный скрипт
сегодня не воскресенье выполняем ежедневный скрипт
сегодня не воскресенье выполняем ежедневный скрипт
сегодня не воскресенье выполняем ежедневный скрипт
сегодня не воскресенье выполняем ежедневный скрипт
сегодня не воскресенье выполняем ежедневный скрипт
сегодня воскресенье выполняем еженедельный скрипт
В роли вашего скрипта здесь выступает команда echo с соответствующим параметром
Добавлено (16:25):
Да и синонимом встроенной команды test является левая скобочка [
Будет аналогично:
Код: Выделить всё
if [ 1 -eq 1 ]; then echo правда; fi
if test 1 -eq 1; then echo правда; fi
Или так:
Код: Выделить всё
test 1 -eq 2 || echo ложь
[ 1 -eq 2 ] || echo ложь
Поэкспериментируйте.