env
Запись сообщений в syslog из shell скрипта
Логи в скриптах можно вести несколькими способами, один из самых простых – записывать новые сообщения в какой-то файл. Но мне такой подход кажется неправильным. В системе уже есть специальный инструмент для ведения логов syslog. Вот его и стоит использовать!
Для добавления сообщений в syslog есть утилита logger. В принципе может писать сообщения и в отдельный файл. Напишу небольшую функцию, которую можно будет добавлять в любой скрипт для ведения логов.
add_log_message ()
{
local logger='/usr/bin/logger'
local tag='My Script'
local port=514
local host=localhost
local facility='user'
local level='notice'
local message=$1
if [ -z $message ]; then
return 1
else
$logger -t "$tag" -p ${facility}.${level} -P $port -h $host "$message"
if [ "x$?" != "x0" ]; then
return 2
fi
fi
}
add_log_message 'Hello world'
Опция -t задает TAG, фактически TAG можно использовать для идентификации источника сообщения. Так же logger умеет отправлять сообщения syslog-у на другом сервер, т.е. легко можно организовать сбор всех типов логов на один сервер.
logger -P 514 -h logger.domain.ru 'Hello World'
По умолчанию logger пишет все сообщения в facility user с приоритетом notice, но это можно поменять используя ключ -p:
logger -p cron.warning 'Hello world'
Быстрый способ создать большой файл при помощи dd
Иногда для тестирования нужно создать какой-то большой файл. Для этого чаще всего применяют утилиту dd.
Файл создается обычно так:
dd if=/dev/zero of=/data/bigfile count=1024 bs=1024k
Получим файл размером в 1GB, причем dd честно 1024 раза запишет нули блоками по 1МБ. С 1Гб можно и потерпеть, но как быть с 10ГБ или 100ГБ? Ждать долго, да и диски жалко. Есть более быстрый и простой способ – опция seek. Смысл ее в том, что запись dd начнет только после нахождения определенного номера блока с начала вывода из if. Если я правильно понимаю физику процесса, то происходит это так: dd создает файл, ждет пока пройдет N блоков, указанных в seek, после чего начинает записывать блоки, указанные в count. Получается “пустой” файл большого размера.
dd if=/dev/zero of=/data/bigfile count=1 bs=1024k seek=`expr 1024 * 10`
Мгновенно получаем файл, размером в 10ГБ!
Как посмотреть окружение запущенного процесса?
Иногда нужно подсмотреть окружение запущенного процесса, для этого есть несколько способов и утилит.
Linux:
cat /proc/PID/environ
Solaris:
pargs -e PID
FreeBSD:
mount -t procfs none /proc
ps ewwwp PID
Общий подход для всех UNIX систем:
gcore PID
получим core файл
string core.PID
Как приостановить процесс и потом вернуться к его исполнению в Linux
Если у вас есть какой-то работающий процесс, например gzip, архивирующий большой объем данных, и вам вдруг стало необходимо проверить, а хватит ли места на диске, то вас совершенно необязательно прерывать архивирование.
› Continue reading
Alias – хороший способ упростить свою жизнь в консоли.
Любой unix-администратор проводит большую часть своего рабочего времени в консоли. Команды, команды и еще раз команды — вот наш хлеб. Но все равно хочется организовать свою работу так, чтобы в ней было меньше рутины. Хорошим подспорьем будет команда alias.
› Continue reading
Поиск файлов в linux: find
Задача поиска определенных файлов или каталогов достаточно часто встречается в работе Unix-администратора. Начинающие администраторы решают ее странными и малоэффективными способами, например я в первые дни своего знакомства с linux использовал ls с ключом рекурсивного просмотра каталогов и потом натравливал grep на вывод ls. Согласитесь, выглядит достаточно дико.
› Continue reading