крон: синтаксис удара, не работающий

На самом деле проблема состояла в том, что это не сетевая файловая система. Операционная система не ожидает, что что-то еще изменит данные в разделе. Это также кэширует маленькие файлы, и это - физическое место на разделе, поэтому кажется, что это не изменяется вообще.

В случае, если размер раздела будет намного больше из размера RAM, и файлы будут достаточно огромны, он может привести, по крайней мере, к системной ошибке и умер точка монтирования или даже к панике ядра.

Таким образом, это все в порядке. Ничто странное. Я был просто немного нетерпелив в своих тестах и сделал поспешное заключение.

1
30.09.2013, 11:07
3 ответа

Крон, если я не ошибаюсь, значения по умолчанию к /bin/sh. Проверить /etc/crontab/ для строки SHELL=. Это, вероятно, установлено на /bin/sh (dash). Я полагаю, что можно установить SHELL=/bin/bash в Вашем собственном пользователе crontab файл (тот, отредактированный crontab -e). Или можно написать сценарий его.

3
27.01.2020, 23:12
  • 1
    я имею SHELL=/bin/sh в моем /etc/crontab. Есть ли любая причина, почему я должен хотеть использовать /bin/sh, вместо /bin/bash ? Я нахожусь на Debian, и системная оболочка bash. Итак, почему они сохранили бы sh для крона. AFAIK, bash совместимо с sh, но не наоборот. –  Martin Vegter 30.09.2013, 10:38
  • 2
    Нет, нет никакой причины сохранить это набором к /bin/sh AFAIK. Я думаю, что это - просто настройка по умолчанию. –  AGHz 30.09.2013, 14:35

Да, необходимо использовать sh синтаксис. Можно найти спецификацию для портативного стандарта sh синтаксис там.

В этом случае Вы хотите [ "$((i+=1))" -le 29 ], или если Ваш sh основан на более старой версии ash это еще не поддерживало полный набор стандартных арифметических операторов, использует [ "$i" -le 28 ] ...; i=$(($i + 1)).

Предупреждение: обработка мирового записываемого каталога как /var/tmp под кроном похож на открытие банки червя wrt безопасность.

Необходимо рассматривать имена файлов и их тип там как недоверяемые и чрезвычайно грязные.

Ваш $(/bin/ls -r /var/tmp/*) в особенности является поддельным, поскольку это делает много предположений на том, какие символы имена файлов могут содержать и предполагают, что ни один из них не каталоги или символьные ссылки на каталоги.

3
27.01.2020, 23:12
  • 1
    , когда я использую [ "$((I+=1))" -le 28 ], крон жалуется: /bin/sh: 1: Bad substitution –  Martin Vegter 29.09.2013, 22:41

Для создания этого абсолютно портативным, можно заменить $ () синтаксис с:

I=1; for X in `/bin/ls -r /var/tmp/*`; do [ $I -le 28 ] && echo "lower" || echo "higher"; I=`expr $I + 1`; done

Но остерегайтесь заданий крона и мировых перезаписываемых каталогов.

2
27.01.2020, 23:12

Теги

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