linux crontab + как установить crontab в 23:00

В этом фрагменте есть несколько ошибок, но, как ни странно, двойная проверка файлов не входит в их число.

Во-первых, конструкция $ () вокруг find неверна, как показывает @EricRenouf. Правильный способ сделать это - использовать что-то вроде

while read filename
do
    source $filename
done < <(find ....)

, которое вызывает find в подоболочке и считывает имена файлов в переменную filename в основной оболочке (это find | при чтении x идея с ног на голову, но, к сожалению, не такая переносимая)

Во-вторых, проверка каталога -d является избыточной; find не найдет никаких файлов, если каталог не существует, поэтому проверка его существования не имеет смысла.

Однако аргумент -типа f в find не проверяет то же самое, что аргумент -f в test . POSIX имеет следующее , чтобы сказать о тесте :

-f pathname

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

и имеет это , чтобы сказать о find :

-type c

Первичный файл должен оцениваться как истинный, если тип файла - c , где c - это 'b', 'c', 'd', 'l', 'p', 'f' или 's' для специального файла блока, специального символа файл, каталог, символическая ссылка, FIFO, обычный файл или сокет соответственно.

Итак, если у вас есть обычный файл, который «не может быть разрешен», то у вас есть файл, для которого test -f завершится ошибкой, но find -type f завершится успешно. . Один из способов сделать это - иметь файл в каталоге, который вы можете читать, но не можете получить доступ:

wouter@gangtai:~$ ls -ld foo
drw-r--r--. 2 wouter wouter 4096 apr  1 18:38 foo
wouter@gangtai:~$ find foo -type f | while read file; do if [ -f $file ]; then   echo $file tests -f; else   echo $file does not test -f; fi; done
foo/bar does not test -f
wouter@gangtai:~$ ls -l foo
ls: cannot access 'foo/bar': Permission denied
total 0
-????????? ? ? ? ?            ? bar

тип файла (будь то каталог, обычный файл или что-то еще) может быть обнаружено, если у вас есть r , но нет x , разрешений на каталог, в котором хранится файл. Однако, чтобы иметь возможность «разрешить» его (т.е. вызвать одну из функций stat () для этого файла), вам понадобится бит разрешения x для этого каталога.

Конечно, полезен ли вообще такой тест в скрипте оболочки для вашего .bashrc - это другой вопрос. Я бы сказал, что нет. Однако это не означает, что эти два теста одинаковы, и есть случаи, когда эта разница важна ...

2
21.03.2016, 14:10
3 ответа

Если вы прочитаете документацию по cron, вы увидите, что вам нужно использовать команду crontab -e и ввести запись, например:

0 23 * * * /path/to/executable
3
29.04.2021, 00:16
crontab "filename"

Откройте имя файла и передайте 00 23 * * * "cmd"

Сохраните и закройте файл.

Чтобы перечислить содержимое crontab:

crontab -l

Чтобы отредактировать crontab:

crontab -e
0
29.04.2021, 00:16

Вы добавляете следующую строку в / etc / crontab :

0 23 * * *  yael  /path/to/task

где yael - это пользователь, запускает задачу, а / путь / к / задаче - это путь к сценарию оболочки или команде, которую вы хотите запустить.

0
29.04.2021, 00:16

Теги

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