$ find / -type f -size 0 -exec ls -l {} \;

В одной из моих систем каждый день создается системный журнал аудита. К имени журнального файла добавляется номер, что позволяет сразу определить, какой файл создан позже, а какой -pаньше. Например, версии файла admin.log нумеруются последовательно: admin.log.001, admin.log. O02 и т. д. Ниже приведена команда find, которая удаляет все файлы admin.log, созданные более семи дней назад:

$ find /logs -name 'admin.log. [0-9] [0-9][О-9] ' — atime +7 exec \ rm {} \;

2.2. Команде xargs

При наличии опции -exec команда find передает указанной команде все найденные файлы, которые обрабатываются за один раз. К сожалению, в некоторых системах длина командной строки ограниченна, поэтому при обработке большого числа файлов может быть выдано сообщение об ошибке, которое обычно гласит: "Too many arguments" (слишком много аргументов) или "Arguments too long" (слишком большой список аргументов). В этой ситуации на помощь приходит команда xargs. файлы, полученные от команды find, она обрабатывает порциями, а не все сразу.

Рассмотрим пример, в котором команда find возвращает список всех файлов, имеющихся в системе, а команда xargs выполняет для них команду file, проверяющую тип каждого файла:

$ find / -type f -print | xargs file

/etc/protocols: English text /etc/securetty: ASCII text

Ниже приведен пример, демонстрирующий поиск файлов дампа, имена которых команда echo помешает в файл /tmp/core.log.

$ find / -name core -print | xargs echo > /tmp/core.log

В следующем примере в каталоге /apps/audit выполняется поиск всех файлов, к которым другие пользователи имеют полный доступ. Команда chmod удаляет для них разрешение на запись:

$ find /apps/audit -perm -7 -print | xargs chmod o‑w

Завершает наш перечень пример, в котором команда grep ищет файлы, содержащие слово "device":

$ find / -type f -print | xargs grep "device"

2.3. Заключение

Команда find представляет собой прекрасный инструмент поиска различных файлов по самым разнообразным критериям. Благодаря опции -exec, а также команде xargs найденные файлы могут быть обработаны практически любой системной командой.

ГЛАВА 3

Выполнение команд в фоновом режиме

Когда вы работаете за терминалом, во многих случаях неудобен вывод на экране результатов выполнения заданий в системе, ведь в это время вы можете быть заняты другими важными делами, например просмотром сообщений электронной почты. Кроме того, иногда возникает необходимость выполнять задания, интенсивно использующие дисковые ресурсы или ресурсы центрального процессора, в то время, когда загрузка системы минимальна. Для этих целей специально разработаны команды, которые позволяют запускать задания в фоновом режиме, а не на экране терминала.

В этой главе рассматриваются следующие темы:

   • планирование заданий с помощью программы cron;

   • планирование заданий с помощью команды at;

   • выполнение заданий в фоновом режиме;

   • выполнение заданий с помощью команды nohup.

cron

Системный планировщик, применяемый для многократного выполнения заданий в указанные периоды времени; является демоном, т. е. работает только в фоновом режиме

at

Команда, которая служит для однократного выполнения заданий в назначенное время

&

Оператор, позволяющий перевести задание в фоновый режим

nohup

Команда для перевода задания в фоновый режим таким образом, чтобы оно не реагировало на сигнал HUP (hang‑up -oтбой) и продолжало выполняться, даже если запустивший его пользователь выйдет из системы

3.1. Планировщик cron и команда crontab

Программа cron является основным системным планировщиком, служащим для выполнения различных заданий в фоновом режиме. Команда crontab позволяет пользователям создавать, редактировать и удалять инструкции для программы cron посредством специального crontab–файла. У каждого пользователя может быть свой crontab–файл, но в крупных системах администратор (пользователь root) обычно исключает данную возможность. В этом случае администратор создает вспомогательные файлы cron.deny и cron.allow, содержащие списки пользователей, которым соответственно запрещено и разрешено выполнять команду crontab.

3.1.1. Структура crontab–файла

Чтобы планировать выполнение заданий в определенное время, нужно знать формат записей в crontab–файле. Каждая запись содержит шесть полей;

1

Минуты — 0—59

2

Часы — 0—23 (0 означает полночь)

3

День месяца — 1—31

4

Месяц — 1—12

5

День недели — 0—7 {0 и 7 означает воскресенье)

6

Команда, которая должна быть выполнена

Общий формат записи таков:

минуты часы день_месяца месяц деиь_нвдели команда

Все поля разделяются пробелами.

В первых пяти полях записи могут быть указаны диапазоны значений. Например, для того чтобы обеспечить выполнение задания с понедельника по пятницу, надлежит указать в пятом поле значение 1-5,

Допускается также задание списка значений, разделенных запятыми. Если,

например, задание должно быть выполнено только в понедельник и четверг, следует

ввести 1, 4.

Символ звездочки (*) — это обозначение диапазона "от первого до последнего", т. е. каждую минуту, каждый день и т. д. Если указан диапазон, то можно задать для него шаг пропуска с помощью символа /. Например, запись */2 означает "каждый второй".

В crontab–файле допускаются комментарии. В начале строки комментария должен стоять символ #.

3.1.2. Примеры записей в crontab–файле

Запись

30 21 * * * /apps/bin/cleanup.sh

означает выполнение сценария cteanup.sh в каталоге /apps/bin каждый вечер в 21:30. Запись

45 4 1,10,22 * * /apps/bin/backup.sh

означает выполнение сценария backup.sh в каталоге /apps/bin в 4:45 утра 1–го, 10–го и 22–го числа каждого месяца. Запись

10 1 * * 6,0 /bin/find -name "core" — exec rm {} \;

означает выполнение команды find для удаления файлов дампа в 1:10 ночи по субботам и воскресеньям. Запись

0,30 18-23 * * * /apps/bin/dbcheck.sh

означает выполнение сценария dbchecksh в каталоге /apps/bin каждые полчаса между 18:00 и 23:00.

Запись

0 23 * * 6 /apps/bin/qtrend.sh

означает выполнение сценария qtrend.sh в каталоге /apps/bin в 23:00 каждую субботу. При выполнении команд и сценариев, указанных в crоntab–файле, следует убедиться, что корректно заданы все необходимые переменные среды. Программа cron не сделает это за вас: это не входит в ее компетенцию. Поэтому локальные переменные среды должны быть установлены вручную, в отличие от глобальных переменных, которые устанавливаются автоматически. Данная задача может быть решена непосредственно в crontab–файле за счет создания записи следующего вида:

имя_переменной=значение

Если программа cron не сможет выполнить поступившую команду, пользователь получит электронное сообщение, в котором будут указаны причины неудачи.


Перейти на страницу:
Изменить размер шрифта: