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

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

05.05.2024, 16:17. Показов 980. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2024, 16:17
Ответы с готовыми решениями:

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

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

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

22
Заблокирован
05.05.2024, 16:26
Оформить в виде функции (скажем, log()), а в ней проверять переменную, скажем, LOGGING: если true, писать, если false - нет.
1
1076 / 353 / 74
Регистрация: 30.08.2017
Сообщений: 2,174
05.05.2024, 16:37
Лучший ответ Сообщение было отмечено Pphantom как решение

Решение

Ну или колхозный вариант - в лоб.
Bash Скопировано
1
2
LOG="$HOME/scripts/umount.log"
#LOG="/dev/null"
Надо логи - вот выше, не надо - перекомментируете строки.
1
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
05.05.2024, 16:48  [ТС]
Спасибо, попробую через функцию. Если не получится пойдет и колхозный вариант)
0
30 / 21 / 9
Регистрация: 08.03.2020
Сообщений: 89
05.05.2024, 16:56
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
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
05.05.2024, 17:07  [ТС]
Смысл всех примеров понял, но в баше я вобще никак а скрипт нужен)
Буду конечно разбираться но на данный момент могу только сделать или колхозный вариант или его же но с вариантом от 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
30 / 21 / 9
Регистрация: 08.03.2020
Сообщений: 89
05.05.2024, 17:14
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
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
05.05.2024, 17:38  [ТС]
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
Невнимательный
 Аватар для ft4l
2810 / 1146 / 353
Регистрация: 08.02.2013
Сообщений: 6,548
Записей в блоге: 2
05.05.2024, 17:39
kms,
Bash Скопировано
1
2
#LOG="$HOME/scripts/umount.log"
LOG="/dev/null"
0
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
05.05.2024, 17:40  [ТС]
ft4l, про это уже было. Оставлю на крайний случай
0
Невнимательный
 Аватар для ft4l
2810 / 1146 / 353
Регистрация: 08.02.2013
Сообщений: 6,548
Записей в блоге: 2
05.05.2024, 17:41
Цитата Сообщение от ft4l Посмотреть сообщение
/dev/null
или по тексту заменить местами $LOG на $LOG2 ... и сделать /dev/null только для $LOG2
... хотя по тексту можно и просто закомментировать ненужное
0
30 / 21 / 9
Регистрация: 08.03.2020
Сообщений: 89
05.05.2024, 17:48
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
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
05.05.2024, 18:08  [ТС]
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
 Аватар для volodin661
6328 / 2169 / 340
Регистрация: 10.12.2013
Сообщений: 7,453
06.05.2024, 14:12
kms,
есть поприличней инструмент для работы с telnet-like приложениями.

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

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

Добавлено через 16 минут
Цитата Сообщение от kms Посмотреть сообщение
но в баше я вобще никак а скрипт нужен
а bash и не нужен. ( python, java, ruby, tcl, perl, go etc )
1
321 / 46 / 11
Регистрация: 08.04.2022
Сообщений: 177
06.05.2024, 16:30
Почитайте описание команды 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
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
06.05.2024, 17:05  [ТС]
siberian-man, спасибо, буду знать
volodin661, глянул, у меня нету Expect а ради одного случая что то устанавливать не охота.
Цитата Сообщение от volodin661 Посмотреть сообщение
а bash и не нужен. ( python, java, ruby, tcl, perl, go etc )
Точно, не знаю что меня перекинуло на баше, проще было бы на питоне
Ну теперь уже ладно. В принципе все работает.
0
 Аватар для volodin661
6328 / 2169 / 340
Регистрация: 10.12.2013
Сообщений: 7,453
07.05.2024, 13:14
Цитата Сообщение от kms Посмотреть сообщение
у меня нету. устанавливать не охота
не удивлён.
поколение next. но почему-то шмайлов маловато, всего 2 на 4 предложения.
неохота - пишется слитно.
0
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
07.05.2024, 13:29  [ТС]
volodin661, детский сад. Обиделся что ли?
У меня NAS Synology, я там специально все лишнее по удалял, что бы по шустрее был и ставить что то еще ради одного раза, нафиг?
PS: Не знаю сколько тебе лет, но возможно когда я на линуксе безвылазно сидел ты еще под стол бегал.
Но это было очень давно.
0
 Аватар для volodin661
6328 / 2169 / 340
Регистрация: 10.12.2013
Сообщений: 7,453
07.05.2024, 14:14
Цитата Сообщение от kms Посмотреть сообщение
когда я на линуксе безвылазно сидел
недетский уровень компетенции сидельца ощущается.

expect появился ~ в 1993-м
0
1 / 1 / 0
Регистрация: 28.12.2015
Сообщений: 20
07.05.2024, 14:27  [ТС]
Кривлянье, неспособность улавливать суть разговора, одним словом поколение пепси.
При чем тут expect? Или ты узнал это слово и теперь везде его упоминаешь?
Это пройдет...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2024, 14:27
Помогаю со студенческими работами здесь

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

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

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

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

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


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

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

Новые блоги и статьи
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер