my $data = do { local(@ARGV, $/) = 'file.txt'; <> }
пятница, 18 ноября 2016 г.
понедельник, 10 октября 2016 г.
svchost.exe (netsvc) high CPU/memory usage
Скрипт, лечащий залипание Windows Update на Windows 7, когда svchost.exe (netsvc) потребляет много ресурсов CPU и памяти.
Следует использовать если проблема осталась после установки обновления Windows Update от июня 2015
Следует использовать если проблема осталась после установки обновления Windows Update от июня 2015
@echo off REM Script to Reset Windows Updates agent REM Stop Services net stop bits net stop wuauserv net stop appidsvc net stop cryptsvc REM Delete the qmgr*.dat files Del "%ALLUSERSPROFILE%\Application Data\Microsoft\Network\Downloader\qmgr*.dat" REM Rename folders Ren %systemroot%\SoftwareDistribution SoftwareDistribution.bak Ren %systemroot%\system32\catroot2 catroot2.bak REM Reset services permissions sc.exe sdset bits D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU) sc.exe sdsetwuauserv D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU) REM ReRegister services cd /d %windir%\system32 regsvr32.exe /U /s vbscript.dll regsvr32.exe /U /s mshtml.dll regsvr32.exe /U /s msjava.dll regsvr32.exe /U /s msxml.dll regsvr32.exe /U /s actxprxy.dll regsvr32.exe /U /s shdocvw.dll regsvr32.exe /U /s Mssip32.dll regsvr32.exe /U /s wintrust.dll regsvr32.exe /U /s initpki.dll regsvr32.exe /U /s dssenh.dll regsvr32.exe /U /s rsaenh.dll regsvr32.exe /U /s gpkcsp.dll regsvr32.exe /U /s sccbase.dll regsvr32.exe /U /s slbcsp.dll regsvr32.exe /U /s cryptdlg.dll regsvr32.exe /U /s Urlmon.dll regsvr32.exe /U /s Oleaut32.dll regsvr32.exe /U /s msxml2.dll regsvr32.exe /U /s Browseui.dll regsvr32.exe /U /s shell32.dll regsvr32.exe /U /s atl.dll regsvr32.exe /U /s jscript.dll regsvr32.exe /U /s msxml3.dll regsvr32.exe /U /s softpub.dll regsvr32.exe /U /s wuapi.dll regsvr32.exe /U /s wuaueng.dll regsvr32.exe /U /s wuaueng1.dll regsvr32.exe /U /s wucltui.dll regsvr32.exe /U /s wups.dll regsvr32.exe /U /s wups2.dll regsvr32.exe /U /s wuweb.dll regsvr32.exe /U /s scrrun.dll regsvr32.exe /U /s msxml6.dll regsvr32.exe /U /s ole32.dll regsvr32.exe /U /s qmgr.dll regsvr32.exe /U /s qmgrprxy.dll regsvr32.exe /U /s wucltux.dll regsvr32.exe /U /s muweb.dll regsvr32.exe /U /s wuwebv.dll regsvr32.exe /s vbscript.dll regsvr32.exe /s mshtml.dll regsvr32.exe /s msjava.dll regsvr32.exe /s msxml.dll regsvr32.exe /s actxprxy.dll regsvr32.exe /s shdocvw.dll regsvr32.exe /s Mssip32.dll regsvr32.exe /s wintrust.dll regsvr32.exe /s initpki.dll regsvr32.exe /s dssenh.dll regsvr32.exe /s rsaenh.dll regsvr32.exe /s gpkcsp.dll regsvr32.exe /s sccbase.dll regsvr32.exe /s slbcsp.dll regsvr32.exe /s cryptdlg.dll regsvr32.exe /s Urlmon.dll regsvr32.exe /s Oleaut32.dll regsvr32.exe /s msxml2.dll regsvr32.exe /s Browseui.dll regsvr32.exe /s shell32.dll regsvr32.exe /s Mssip32.dll regsvr32.exe /s atl.dll regsvr32.exe /s jscript.dll regsvr32.exe /s msxml3.dll regsvr32.exe /s softpub.dll regsvr32.exe /s wuapi.dll regsvr32.exe /s wuaueng.dll regsvr32.exe /s wuaueng1.dll regsvr32.exe /s wucltui.dll regsvr32.exe /s wups.dll regsvr32.exe /s wups2.dll regsvr32.exe /s wuweb.dll regsvr32.exe /s scrrun.dll regsvr32.exe /s msxml6.dll regsvr32.exe /s ole32.dll regsvr32.exe /s qmgr.dll regsvr32.exe /s qmgrprxy.dll regsvr32.exe /s wucltux.dll regsvr32.exe /s muweb.dll regsvr32.exe /s wuwebv.dll REM reset winsock netsh winsock reset REM reset proxy netsh winhttp reset proxy REM restart services net start bits net start wuauserv net start appidsvc net start cryptsvc REM Install the latest Windows Update Agent. start http://support.microsoft.com/kb/949104
вторник, 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:
Установка в 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'
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
}
четверг, 12 марта 2015 г.
Вывод utf8-строк с помощью Data::Dumper
$Data::Dumper::Useqq = 1;
{
no warnings 'redefine';
sub Data::Dumper::qquote {
my $s = shift;
return "'$s'";
}
}
Подписаться на:
Сообщения (Atom)