Я нашел этот кусок кода в /etc/cron.daily/apf
#!/bin/bash
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1
Это сбрасывает и перезагружает брандмауэр.
Я не понимаю >> /dev/null 2>&1
часть.
Какова цель наличия этого в cron? Это отменяет мои правила брандмауэра. Могу ли я безопасно удалить эту работу cron?
shell
syntax
posix
io-redirection
отдыха
источник
источник
>&- 2>&-
.2>&1 > /dev/null
же как> /dev/null 2>&1
? Это кажется мне более естественным .../dev/null
будет выводиться только исходный стандартный вывод на -stderr. Попробуйте инструмент на gist.github.com/zigg/344361751c0110419b0fОтветы:
>> /dev/null
перенаправляет стандартный вывод (stdout
) на/dev/null
, который отбрасывает его.(
>>
Кажется, что это излишне, так как>>
означает добавление в то время, как>
означает усечение и запись, и добавление или запись в/dev/null
имеет одинаковый чистый эффект. Обычно я просто использую>
по этой причине.)2>&1
перенаправляет стандартную ошибку (2
) на стандартный выход (1
), который затем также удаляет его, поскольку стандартный вывод уже перенаправлен.источник
&
символ указывает там2>&1
.When redirecting data streams, & means whatever follows is a file descriptor, not a filename.
Разобьем
>> /dev/null 2>&1
утверждение на части:Часть 1:
>>
перенаправление выводаЭто используется для перенаправления вывода программы и добавления вывода в конец файла. Больше...
Часть 2:
/dev/null
специальный файлЭто специальный файл псевдо-устройств .
Команда
ls -l /dev/null
выдаст вам детали этого файла:Вы наблюдали
crw
? Это означает, что это файл псевдоустройства, относящийся к типу специальных символов, который обеспечивает последовательный доступ.Часть 3:
2>&1
дескриптор файлаВсякий раз, когда вы выполняете программу, операционная система всегда открывает три файла: стандартный ввод, стандартный вывод и стандартную ошибку, как мы знаем, всякий раз, когда файл открывается, операционная система (из ядра ) возвращает неотрицательное целое число, называемое дескриптором файла . Дескриптор файла для этих файлов - 0, 1 и 2 соответственно.
Так
2>&1
просто говорит перенаправить стандартную ошибку на стандартный вывод.Короче говоря, с помощью этой команды вы говорите своей программе не кричать во время выполнения.
Какова важность использования
2>&1
?Если вы не хотите выводить какие-либо данные, даже в случае возникновения ошибки в терминале. Чтобы объяснить более четко, давайте рассмотрим следующий пример:
Для вышеприведенной команды вывод не был напечатан в терминале, но что, если эта команда выдает ошибку:
Несмотря на то, что я перенаправляю вывод
/dev/null
, он печатается в терминале. Это потому, что мы не перенаправляем вывод ошибок/dev/null
, поэтому для того, чтобы перенаправить вывод ошибок, необходимо добавить2>&1
:источник
>
это оператор перенаправления, то , что следует оператор перенаправления , как ожидается , будет месторасположение файла , добавляя&
перед тем1
указывает , что это не файл , в котором приложение должны перенаправить вывод , но дескриптор файла. Я буду признателен, если кто-то может добавить больше деталей этого комментария.Это способ тихо выполнить программу и скрыть весь вывод.
/dev/null
это специальный объект файловой системы, который отбрасывает все, что в него записано. Перенаправление потока в него означает скрытие вывода вашей программы.Эта
2>&1
часть означает «перенаправить поток ошибок в выходной поток», поэтому при перенаправлении выходного потока поток ошибок также перенаправляется. Даже если ваша программа пишетstderr
сейчас, этот вывод также будет отброшен.источник
2>&1
самом деле, на самом деле перенаправляетstderr
наstdout
. Разница между этим и тем, что вы заявили, лучше всего иллюстрируется заменой порядка перенаправлений, например2>&1 >/dev/null
./dev/null
стандартный файл, который отбрасывает все, что вы записали в него, но сообщает, что операция записи прошла успешно1
стандартный вывод и2
стандартная ошибка2>&1
перенаправляет стандартную ошибку на стандартный вывод.&1
указывает дескриптор файла (стандартный вывод), в противном случае (если вы используете just1
) вы перенаправите стандартную ошибку в файл с именем1
.[any command] >>/dev/null 2>&1
перенаправляет все стандартные ошибки в стандартный вывод и записывает все это в/dev/null
.источник
Я использую
>> /dev/null 2>&1
для тихого cronjob. Cronjob сделает работу, но не отправит отчет на мою электронную почту.Насколько я знаю, не удаляйте
/dev/null
. Это полезно, особенно когда вы запускаете cPanel , его можно использовать для одноразовых отчетов cronjob.источник
Как описано другими, запись в / dev / null исключает вывод программы. Обычно cron отправляет электронное письмо для каждого вывода процесса, начатого cronjob. Таким образом, записывая вывод в / dev / null, вы предотвращаете спам, если указали свой адрес в cron.
источник
Редактировать
/etc/conf.apf
. SetDEVEL_MODE="0"
.DEVEL_MODE
set to1
добавит задание cron для остановки apf через 5 минут.источник