Автологгирование терминальной сессии.

Языки программирования, IDE, компиляторы, интерпретаторы, гипервизоры и виртуальные среды
Правила форума
Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа.
Аватара пользователя

Автор темы
symon2014
Сообщения: 1578
Зарегистрирован: 29 авг 2016, 02:17
Решено: 19
Откуда: Феодосия
Благодарил (а): 47 раз
Поблагодарили: 427 раз

Автологгирование терминальной сессии.

Сообщение symon2014 » 25 июл 2017, 04:21

Решил сам темку замутить, а то всё отвечаю. :smile:
Набрёл на эту статейку , решил себе сделать. А то бывает бью систему не по детски, и хочется иногда посмотреть на историю своих издевательств. Скрипт вставил, папку для логов создал, ребутнулся и тут атас, нет иксов вообще. С консолью что то прозевал, не пробовал заходить. Переехал в другую ось и оттуда пока закомментил скрипт, до разбирательства. Пустые логи создались. Кто нибудь видит какой нибудь подвох в скрипте? Я как то в этом не очень.
Чуствую подвох здесь - if [ "[color=#FF4040]x[/color]$SESSION_RECORD" = "x" ]
:sry:
Debian (9.1) , LMDE2 , LM 18.2 Mate . Благодарности складываем сюда ---> R320161344462

Аватара пользователя

Автор темы
symon2014
Сообщения: 1578
Зарегистрирован: 29 авг 2016, 02:17
Решено: 19
Откуда: Феодосия
Благодарил (а): 47 раз
Поблагодарили: 427 раз

Автологгирование терминальной сессии.

Сообщение symon2014 » 25 июл 2017, 06:30

Пока победить не удалось, в консоли пашет , в иксы не пушщает. :-D
Скрипт запущен Вт 25 июл 2017 09:14:39
msuser@msuser ~ $ n[Knd[K[Ktvoju mamu imel
tvoju: команда не найдена
msuser@msuser ~ $ sam durak
Программа 'sam' на данный момент не установлена. Вы можете установить её, выполнив:
sudo apt install simon
msuser@msuser ~ $ pipec[K[K[Kzdec
pizdec: команда не найдена
msuser@msuser ~ $ startx


X.Org X Server 1.18.4
Release Date: 2016-07-19
X Protocol Version 11, Revision 0
Build Operating System: Linux 4.4.0-83-generic x86_64 Ubuntu
Current Operating System: Linux msuser 4.10.0-27-generic #30~16.04.2-Ubuntu SMP Thu Jun 29 16:07:46 UTC 2017 x86_64
Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.10.0-27-generic root=UUID=2ac20a70-9d3c-4077-abf5-6e820594e383 ro
Build Date: 17 July 2017 05:05:12PM
xorg-server 2:1.18.4-0ubuntu0.3 (For technical support please see http://www.ubuntu.com/support)
Current version of pixman: 0.33.6
Before reporting problems, check http://wiki.x.org
to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/home/msuser/.local/share/xorg/Xorg.1.log", Time: Tue Jul 25 09:16:36 2017
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
(EE)
Fatal server error:
(EE) parse_vt_settings: Cannot open /dev/tty0 (Permission denied)
(EE)
(EE)
Please consult the The X.Org Foundation support
at http://wiki.x.org
for help.
(EE) Please also check the log file at "/home/msuser/.local/share/xorg/Xorg.1.log" for additional information.
(EE)
(EE) Server terminated with error (1). Closing log file.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
Не удалось получить файловый дескриптор, указывающий на консоль
msuser@msuser ~ $
:sry:
Debian (9.1) , LMDE2 , LM 18.2 Mate . Благодарности складываем сюда ---> R320161344462

В сети
Аватара пользователя

Dja
Сообщения: 2785
Зарегистрирован: 27 авг 2016, 17:03
Решено: 11
Откуда: Воскресенск
Благодарил (а): 393 раза
Поблагодарили: 284 раза

Автологгирование терминальной сессии.

Сообщение Dja » 25 июл 2017, 06:50

скрипт из одной строки? А как он должен писать? Просто текстом?
Или про
# vi /etc/profile

[#Record terminal sessions]
if [ "x$SESSION_RECORD" = "x" ]
then
timestamp=`date "+%m%d%Y%H%M"`
output=/var/log/session/session.$USER.$$.$timestamp
SESSION_RECORD=started
export SESSION_RECORD
script -t -f -q 2>${output}.timing $output
exit
fi
?
Там куча текста на вражеском языке :-D
Новичок? - ознакомься с правилами

В поисках истины :grabli:

Аватара пользователя

Автор темы
symon2014
Сообщения: 1578
Зарегистрирован: 29 авг 2016, 02:17
Решено: 19
Откуда: Феодосия
Благодарил (а): 47 раз
Поблагодарили: 427 раз

Автологгирование терминальной сессии.

Сообщение symon2014 » 25 июл 2017, 06:52

Dja, нет, это только одна строка скрипта, полностью он теме по ссылке.
:sry:
Debian (9.1) , LMDE2 , LM 18.2 Mate . Благодарности складываем сюда ---> R320161344462

В сети
Аватара пользователя

Dja
Сообщения: 2785
Зарегистрирован: 27 авг 2016, 17:03
Решено: 11
Откуда: Воскресенск
Благодарил (а): 393 раза
Поблагодарили: 284 раза

Автологгирование терминальной сессии.

Сообщение Dja » 25 июл 2017, 06:52

подозреваю что там надо что-то доустановить чтоб работало.
Но было бы написано по-русски ) было бы яснее. А то своими каракулями написали и разбирайтесь
Новичок? - ознакомься с правилами

В поисках истины :grabli:

Аватара пользователя

slant
Сообщения: 301
Зарегистрирован: 21 июн 2017, 15:09
Решено: 5
Поблагодарили: 110 раз

Автологгирование терминальной сессии.

Сообщение slant » 25 июл 2017, 15:48

symon2014 писал(а): Чуствую подвох здесь - if [ "x$SESSION_RECORD" = "x" ]
Нет, это легальное выражение для test.
Здесь проверяется не дальнейший ли это форк уже запущенной сессии bash. Смысл в том, что если это новая сессия то выражение будет истинно x = x (х - символ, а не переменная). А вот если это форк, то выражение будет ложным - xstarted = x

Там дальше в скрипте переменная окружения SESSION_RECORD выставляется в значение started и это значение наследуют форкнутые сессии. А сама запись в проверке совершенно нормальна для bash = "x$variable", например, выведет x и сразу следом содержимое $variable, или просто x если $variable не установлена.

Вы, похоже, что-то с правами на файлы где-то намутили в процессе.

Аватара пользователя

slant
Сообщения: 301
Зарегистрирован: 21 июн 2017, 15:09
Решено: 5
Поблагодарили: 110 раз

Автологгирование терминальной сессии.

Сообщение slant » 25 июл 2017, 16:00

Да, и вообще-то в минте (убунту, дебиане, etc) писать что-то свое прямо в /etc/profile - не самое правильное решение.
Для таких скриптов существует каталог /etc/profile.d куда вы можете спокойно добавить свой скрипт.

Аватара пользователя

Автор темы
symon2014
Сообщения: 1578
Зарегистрирован: 29 авг 2016, 02:17
Решено: 19
Откуда: Феодосия
Благодарил (а): 47 раз
Поблагодарили: 427 раз

Автологгирование терминальной сессии.

Сообщение symon2014 » 25 июл 2017, 16:03

slant, Детский афоризм. От перемены мест слагаемых сумма не меняется. Я пробовал этот скрипт покатать в хомяке, ничего утешительного.
:sry:
Debian (9.1) , LMDE2 , LM 18.2 Mate . Благодарности складываем сюда ---> R320161344462

Аватара пользователя

Автор темы
symon2014
Сообщения: 1578
Зарегистрирован: 29 авг 2016, 02:17
Решено: 19
Откуда: Феодосия
Благодарил (а): 47 раз
Поблагодарили: 427 раз

Автологгирование терминальной сессии.

Сообщение symon2014 » 26 июл 2017, 03:28

Кажется я немного разобрался. Моя хотелка отличается от возможностей утилиты script . Это получается пишущий терминал в терминале. Поэтому меня и в иксы не пускало из работающей сессии, я не завершал её корректно. Я то думал, что открыл терминал, поработал, закрыл , а оно в тихаря себе пишет. А оно оказалось для одной сессии. :cray2:
:sry:
Debian (9.1) , LMDE2 , LM 18.2 Mate . Благодарности складываем сюда ---> R320161344462

Аватара пользователя

Автор темы
symon2014
Сообщения: 1578
Зарегистрирован: 29 авг 2016, 02:17
Решено: 19
Откуда: Феодосия
Благодарил (а): 47 раз
Поблагодарили: 427 раз

Автологгирование терминальной сессии.

Сообщение symon2014 » 27 сен 2017, 05:28

Проблема решена. В глобальном смысле. Для причёсывания есть ещё место для фантазии.
На просторах инета был найден скрипт .
# Execute "script" command just once
smart_script(){
# if there's no SCRIPT_LOG_FILE exported yet
if [ -z "$SCRIPT_LOG_FILE" ]; then
# make folder paths
logdirparent=~/Terminal_typescripts
logdirraw=raw/$(date +%F)
logdir=$logdirparent/$logdirraw
logfile=$logdir/$(date +%F_%T).$$.rawlog

# if no folder exist - make one
if [ ! -d $logdir ]; then
mkdir -p $logdir
fi

export SCRIPT_LOG_FILE=$logfile
export SCRIPT_LOG_PARENT_FOLDER=$logdirparent

# quiet output if no args are passed
if [ ! -z "$1" ]; then
script -f $logfile
else
script -f -q $logfile
fi

exit
fi
}

# Start logging into new file
alias startnewlog='unset SCRIPT_LOG_FILE && smart_script -v'

# Manually saves current log file: $ savelog logname
savelog(){
# make folder path
manualdir=$SCRIPT_LOG_PARENT_FOLDER/manual
# if no folder exists - make one
if [ ! -d $manualdir ]; then
mkdir -p $manualdir
fi
# make log name
logname=${SCRIPT_LOG_FILE##*/}
logname=${logname%.*}
# add user logname if passed as argument
if [ ! -z $1 ]; then
logname=$logname'_'$1
fi
# make filepaths
txtfile=$manualdir/$logname'.txt'
rawfile=$manualdir/$logname'.rawlog'
# make .rawlog readable and save it to .txt file
cat $SCRIPT_LOG_FILE | perl -pe 's/\e([^\[\]]|\[.*?[a-zA-Z]|\].*?\a)//g' | col -b > $txtfile
# copy corresponding .rawfile
cp $SCRIPT_LOG_FILE $rawfile
printf 'Saved logs:\n '$txtfile'\n '$rawfile'\n'
}
Что бы он работал, его нужно поместить в имеюшийся в системе файл ~/ .bash_aliases , а также добавить в файл ~/.bashrc строку запуска скрипта ---> smart_script . Но есть одна тонкость, лог не достаточно удобочитаем , и для этого в скрипте есть алиас savelog , приводящий лог в читаемый вид. Но его нужно было выполнять вручную, что несколько некомильфо. С помошью Chocobo и darkfenix удалось решить и это , оказалось достаточно добавить в .bashrc ещё одну строку ----> trap 'savelog log' EXIT . Эта команда отслеживает сигнал EXIT при закрытии терминала и при его обнаружении выполняет алиас savelog а затем закрывает терминал.

Ссылка на источник со скриптом.
:sry:
Debian (9.1) , LMDE2 , LM 18.2 Mate . Благодарности складываем сюда ---> R320161344462

Вернуться в «Программирование, скриптинг, виртуализация»