вторник, 1 сентября 2015 г.

tail -f on rapidly truncated file

При частой перезаписи файла (например, при ротации лог-файла) tail -f останавливается на первом таком событии. Для автоматического подключения к новому файлу следует использовать команду:
tail -f --follow=name --retry <filename>
В случае отсутствия функционала у бинарного tail (например, на busybox) можно использовать следующий bash-скрипт:
#!/bin/bash 

PID=`mktemp`
while true;
do
  [ -e "$1" ] && IO=`stat -c %i "$1"`
  [ -e "$1" ] && echo "restarting tail" && { tail -f "$1" 2> /dev/null & echo $! > $PID; }

  # as long as the file exists and the inode number did not change
  while [[ -e "$1" ]] && [[ $IO = `stat -c %i "$1"` ]]
  do
     sleep 0.5
  done
  [ ! -z $PID ] && kill `cat $PID` 2> /dev/null && echo > $PID
  sleep 0.5
done 2> /dev/null
rm -rf $PID

вторник, 7 июля 2015 г.

Перенос процесса в screen

Иногда возникает необходимость перенести важный долго работающий процесс из консоли без screen в screen для последующего закрытия консоли. Этого можно достичь с помощью утилиты reptyr (GitHub).
Установка в Debian/Ubuntu:
sudo apt-get install reptyr
Использование (в новой консоли):
screen -S <screen name>
reptyr <PID of running process to attach>

среда, 20 мая 2015 г.

Чем заняты inode в /

Сканирование всех директорий в / (без прохода по другим файловым системам) и вывод сортированного списка директорий от наименьшего количества занятых inode к наибольшему:
find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n

пятница, 13 марта 2015 г.

Правильная демонизация в perl

sub daemonize {
  logger('Entering Daemon mode');
  chdir '/' or die "Can't chdir to /: $!";
  umask 0;

  open STDIN,  '<', '/dev/null' or die "Can't read /dev/null: $!";
  open STDOUT, '>', '/dev/null' or die "Can't write to /dev/null: $!";
  open STDERR, '>', '/dev/null' or die "Can't write to /dev/null: $!";

  my $pid = fork;
  exit if $pid;
  if (!defined $pid) { die "Couldn't fork: $!" }
# Here you may want to detach script output from console
# logger_del('console'); #(*)
  setsid() or die "Can't start a new session: $!";

# logger('Now in Daemon mode'); #(*)
  say 'Now in Daemon mode';

  return
}

* 'logger()' is my own tool for convinient data output, you can simply replace it with 'say' or 'print'

четверг, 12 марта 2015 г.

среда, 11 марта 2015 г.

понедельник, 16 февраля 2015 г.

Windows 7 x64 + 1С выгрузка из MySQL

Для правильной работы надо установить ставить MySQL Connector/ODBC x86:
http://dev.mysql.com/downloads/connector/odbc/

При добавлении нового DSN через "Панель управления" - "Администрирование" - "Источники данных (ODBC)" 1С не может произвести выгрузку , т.к. "Источники данных (ODBC)" запускает x64 версию конфигуратора ODBC, а 1С - 32-битное приложение. Решить проблему можно в x86 версии конфигуратора ODBC, запустив:
%SystemRoot%\SysWOW64\odbcad32.exe

Детальнее можно почитать в FAQ:
http://dev.mysql.com/doc/connector-odbc/en/connector-odbc-errors.html