0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
1

Включение и отключение записи в лог файл

05.05.2024, 16:17. Показов 582. Ответов 22

Author24 — интернет-сервис помощи студентам
Подскажите плз.
Есть примерно такой скрипт
Bash
1
2
3
4
#!/bin/bash
LOG="$HOME/scripts/umount.log"
echo START SCRIPT: >> $LOG
date +%x-%R >> $LOG
Как можно включить или отключить запись в лог?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2024, 16:17
Ответы с готовыми решениями:

Алгоритм записи в лог файл, принцип работы?
Интересует процесс записи в лог файл какой вариант лучше? Просьба обосновать ответ Вариант 1:...

При записи в лог файл - не переносит новые записи на новые строки
foreach( $_FILES as $file ) { $format=pathinfo($file, PATHINFO_EXTENSION);...

BAT-файл для записи в лог имён и дат и времени изменения файлов, созданных после его же последнего запуска
Дня всем ГУРУ доброго! Возникла такая проблема, есть каталог куда периодически пишутся файлы......

Включение\отключение звука
Добрый день еще раз. Кто знает, как можно отключить системный звук? Ну и обратно включить...

Отключение и включение меню
Здравствуйте! Подскажите, пожалуйста, как отключить меню со всеми подменю сразу, а не по...

22
Маздаененавистник
367 / 662 / 86
Регистрация: 23.11.2021
Сообщений: 3,680
Записей в блоге: 6
05.05.2024, 16:26 2
Оформить в виде функции (скажем, log()), а в ней проверять переменную, скажем, LOGGING: если true, писать, если false - нет.
1
904 / 275 / 56
Регистрация: 30.08.2017
Сообщений: 1,821
05.05.2024, 16:37 3
Лучший ответ Сообщение было отмечено Pphantom как решение

Решение

Ну или колхозный вариант - в лоб.
Bash
1
2
LOG="$HOME/scripts/umount.log"
#LOG="/dev/null"
Надо логи - вот выше, не надо - перекомментируете строки.
1
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
05.05.2024, 16:48  [ТС] 4
Спасибо, попробую через функцию. Если не получится пойдет и колхозный вариант)
0
26 / 19 / 7
Регистрация: 08.03.2020
Сообщений: 68
05.05.2024, 16:56 5
kms, или, например так:
Bash
1
2
3
4
5
6
7
#!/bin/bash
if [ "$#" -ne 1 ]; then echo usage script condition; fi # если число параметров, переданных скрипту не равно 1
if [ "$1" = true ]; then # если первый параметр равен true, то
    LOG=./log_file.txt
    date=`date '+%D %T'`
    echo start script: $0 -- $date >> $LOG
fi
запускаем скрипт и первым параметром (можете поменять на нужное) передаем true или false, это и будет определять, писать ли в лог или нет.
В лог пишется имя скрипта и дата и время запуска
1
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
05.05.2024, 17:07  [ТС] 6
Смысл всех примеров понял, но в баше я вобще никак а скрипт нужен)
Буду конечно разбираться но на данный момент могу только сделать или колхозный вариант или его же но с вариантом от artemkau88. Ну то есть при передаче аргумента false делать переменную
Bash
1
#LOG="/dev/null"
ну а при true указывать путь до лога.

У меня скрипт типа такого и там для меня сложнее чем я просто пример привел)
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
echo START SCRIPT: >> $LOG
date +%x-%R >> $LOG
(
sleep 1;
echo -en "$USER\r";
sleep 1;
echo -en "$PASSWORD\r";
sleep 1;
echo -en "python /etc/scripts/mount.py\r";
sleep 5;
echo -en "exit\r";
sleep 1;
) | telnet $H >> $LOG
0
26 / 19 / 7
Регистрация: 08.03.2020
Сообщений: 68
05.05.2024, 17:14 7
kms, при указании аргумента false можно вообще ничего не указывать посмотрел скрипт, да, нужно.
Можно при разработке скрипта для критерия записи в лог зарезервировать какой-нибудь его параметр и его использовать, то есть, например:
Bash
1
./script.sh $1 $2 $3 ... #$1 $2 $3  - номера параметров скрипта
Например 3 параметр - это критерий. И также в начало скрипта (если будете использовать мой вариант) можно дописать в условие:
Bash
1
if [ "$#" -ne 3 ]; then echo usage script parameter1 parameter2 condition; exit 1; fi # если число параметров, переданных скрипту не равно 3
Если предполагается использовать, например 3 параметра, а после условие для записи в лог файл и дальше сам скрипт.
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
05.05.2024, 17:38  [ТС] 8
artemkau88, может не совсем понял, но мне в лог писать нужно не просто какой то текст а вывод с телнета.
Создал функцию для логирования, работает, но не знаю как передать туда вывод с телнета
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
echo START SCRIPT: >> $LOG
date +%x-%R >> $LOG
(
sleep 1;
echo -en "$USER\r";
sleep 1;
echo -en "$PASSWORD\r";
sleep 1;
echo -en "python /etc/scripts/mount.py\r";
sleep 5;
echo -en "exit\r";
sleep 1;
) | telnet $H >> $LOG
Вот, в последней строке. Как передать это в функцию?
0
Невнимательный
2630 / 1007 / 328
Регистрация: 08.02.2013
Сообщений: 5,890
Записей в блоге: 2
05.05.2024, 17:39 9
kms,
Bash
1
2
#LOG="$HOME/scripts/umount.log"
LOG="/dev/null"
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
05.05.2024, 17:40  [ТС] 10
ft4l, про это уже было. Оставлю на крайний случай
0
Невнимательный
2630 / 1007 / 328
Регистрация: 08.02.2013
Сообщений: 5,890
Записей в блоге: 2
05.05.2024, 17:41 11
Цитата Сообщение от ft4l Посмотреть сообщение
/dev/null
или по тексту заменить местами $LOG на $LOG2 ... и сделать /dev/null только для $LOG2
... хотя по тексту можно и просто закомментировать ненужное
0
26 / 19 / 7
Регистрация: 08.03.2020
Сообщений: 68
05.05.2024, 17:48 12
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
if [ "$#" -ne 1 ]; then echo usage script condition; exit 1; fi # если число параметров, переданных скрипту не равно 1 выходим с кодом 1
if [ "$1" = true ]; then # если первый параметр равен true, то
    LOG=./log_file.txt
elif [ "$1" = false ]; then
    LOG="/dev/null"
fi
echo START SCRIPT: >> $LOG
date +%x-%R >> $LOG
(
sleep 1;
echo -en "$USER\r";
sleep 1;
echo -en "$PASSWORD\r";
sleep 1;
echo -en "python /etc/scripts/mount.py\r";
sleep 5;
echo -en "exit\r";
sleep 1;
) | telnet $H >> $LOG
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
05.05.2024, 18:08  [ТС] 13
artemkau88, ну да, я про это выше писал, в зависимости от передаваемого аргумента менять переменную LOG.

Сделал так, вроде работает. Осталось определелиться, менять переменную LOGGING в самом файле или через передаваемый аргумент при вызове скрипта. Но это уже второе.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
USER="root"
# PASSWORD="root"
LOG="/volume1/public/e2_scripts/mount.log"
LOGGING=true
 
function Log()
{
 if "$LOGGING"; then
    echo $1 >> $LOG 
 fi
}
 
HOSTS="
192.168.1.41
192.168.1.46
"
for H in $HOSTS
do
Log 'START SCRIPT:'
Log `date '+%x-%R'`
output="$((
sleep 1;
echo -en "$USER\r";
sleep 1;
# echo -en "$PASSWORD\r";
# sleep 1;
echo -en "python /etc/enigma2/mount_net_share.py\r";
sleep 5;
echo -en "exit\r";
#sleep 1;
) | telnet $H)"
Log "$output"
Log '==================================='
done
0
6023 / 2029 / 326
Регистрация: 10.12.2013
Сообщений: 6,960
06.05.2024, 14:12 14
kms,
есть поприличней инструмент для работы с telnet-like приложениями.

Expect – это общее название инструментов, реализующих:
• автоматизацию взаимодействия с терминалом, даже если для этого необходим ввод пароля или выполнение иных условий;
• диалоговую модель взаимодействия, которая основывается на простом ритме запросов и ответов.

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

Добавлено через 16 минут
Цитата Сообщение от kms Посмотреть сообщение
но в баше я вобще никак а скрипт нужен
а bash и не нужен. ( python, java, ruby, tcl, perl, go etc )
1
315 / 42 / 9
Регистрация: 08.04.2022
Сообщений: 162
06.05.2024, 16:30 15
Почитайте описание команды exec, чтобы в каждой команде не писать это
Цитата Сообщение от kms Посмотреть сообщение
>> $LOG
Так можно назначить stdout/stderr как в отдельные файлы (пример 1), так и в один (см. пример 2).
Bash
1
2
3
4
5
6
7
8
9
10
11
## пример 1
exec >>"/tmp/logfile.out"
exec 2>>"/tmp/logfile.err"
 
## пример 2
#exec >>"/tmp/logfile.log"
#exec 2>&1
 
hostname
bla -bla -bla
date
1
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
06.05.2024, 17:05  [ТС] 16
siberian-man, спасибо, буду знать
volodin661, глянул, у меня нету Expect а ради одного случая что то устанавливать не охота.
Цитата Сообщение от volodin661 Посмотреть сообщение
а bash и не нужен. ( python, java, ruby, tcl, perl, go etc )
Точно, не знаю что меня перекинуло на баше, проще было бы на питоне
Ну теперь уже ладно. В принципе все работает.
0
6023 / 2029 / 326
Регистрация: 10.12.2013
Сообщений: 6,960
07.05.2024, 13:14 17
Цитата Сообщение от kms Посмотреть сообщение
у меня нету. устанавливать не охота
не удивлён.
поколение next. но почему-то шмайлов маловато, всего 2 на 4 предложения.
неохота - пишется слитно.
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
07.05.2024, 13:29  [ТС] 18
volodin661, детский сад. Обиделся что ли?
У меня NAS Synology, я там специально все лишнее по удалял, что бы по шустрее был и ставить что то еще ради одного раза, нафиг?
PS: Не знаю сколько тебе лет, но возможно когда я на линуксе безвылазно сидел ты еще под стол бегал.
Но это было очень давно.
0
6023 / 2029 / 326
Регистрация: 10.12.2013
Сообщений: 6,960
07.05.2024, 14:14 19
Цитата Сообщение от kms Посмотреть сообщение
когда я на линуксе безвылазно сидел
недетский уровень компетенции сидельца ощущается.

expect появился ~ в 1993-м
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 15
07.05.2024, 14:27  [ТС] 20
Кривлянье, неспособность улавливать суть разговора, одним словом поколение пепси.
При чем тут expect? Или ты узнал это слово и теперь везде его упоминаешь?
Это пройдет...
0
07.05.2024, 14:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2024, 14:27
Помогаю со студенческими работами здесь

Отключение\Включение дисководов
Как программно включить/выключить дисководы? Хоть дайте какую-нубудь информацию.:-[

Включение / отключение прокси
Добрый день! Постоянно требуется вкл./откл. прокси в LAN Settings -> use a proxy server for your...

Отключение / включение функций
У меня на локалхосте, я так подозреваю, отключена функция flush(). Подскажите кк её включить?...

Включение/отключение сопроцессора
Доброго времени суток. Подскажите, как можно выполнить включение и выключение арифметического...

Отключение / включение USB
есть usb прибор ,есть прога. Дык вот когда все подключаю в первый раз. то норм работает. когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru