Рейтинг:0

Я не могу сохранить скрипт bash

флаг us

Я нашел и немного модифицировал следующий скрипт, который следит за уведомление-отправить уведомления и сбрасывать их в файл.

#!/бин/баш

лог-файл=$1

dbus-monitor "interface='org.freedesktop.Notifications'" |\
 grep --line-buffered "строка" |\
 grep --line-buffered -e method -e ":" -e '""' -e срочность -e уведомление -v |\
 grep --line-buffered '.*(?=строка)|(?<=строка).*' -oPi |\
 grep --line-buffered -v '^\s*$' |\
 тс |\
 xargs -I '{}' -d '\n' echo -e {} >> $logfile

Если я запускаю его вручную:

notifylog.txt

процесс продолжает работать некоторое время, но в конце концов останавливается. Если я добавлю его в crontab, например:

@reboot /путь/к/файлу/notifylog/home/user/notifylog.txt

он выполняется один раз, а затем останавливается (или в последний раз работал очень мало).

Я даже пытался добавить его в приложения для запуска, например:

/путь/к/файлу/notifylog/home/user/notifylog.txt

и тот же результат. Следующее работает при выполнении вручную, но не из crontab или запускаемых приложений:

#!/бин/баш

logfile='/home/user/notifylog.txt'
rm -f $файл журнала
коснитесь $logfile

пока верно; do /path/to/file/notifylog $logfile && break;done

Я добавил в systemd со следующими шагами:

sudo nano /lib/systemd/system/notifylog.service

затем я добавил:

[Ед. изм]
Описание=уведомить-отправить журнал

[Оказание услуг]
ExecStart=/путь/к/файлу/notifylog

[Установить]
WantedBy=многопользовательская.цель

тогда:

sudo systemctl демон-перезагрузка
sudo systemctl включить notifylog.service
sudo systemctl запустить notifylog.service
статус sudo systemctl notifylog.service

последний дает мне:

▪ notifylog.service — журнал отправки уведомлений
     Загружено: загружено (/lib/systemd/system/notifylog.service; включено; предустановка поставщика: включена)
     Активен: неактивен (мертв) с ср 20.10.2021 19:01:49 -03; 3 мин 52 с назад
    Процесс: 364180 ExecStart=/path/to/file/notifylog (code=exited, status=0/SUCC>
   Основной PID: 364180 (код=выход, статус=0/УСПЕХ)

20 октября 19:01:49 mymachine systemd[1]: Запущен журнал отправки уведомлений.
20 октября 19:01:49 mymachine notifylog [364186]: не удалось открыть соединение с сеансовой шиной: невозможно автоматически запустить демон dbus без $ DISPLAY для X11
20 октября 19:01:49 mymachine systemd[1]: notifylog.service: успешно.

Вроде не запускается.

Для этого я немного модифицировал скрипт:

#!/бин/баш

logfile='/home/user/notifylog.txt'
rm -f $файл журнала
коснитесь $logfile

dbus-monitor "interface='org.freedesktop.Notifications'" |\
 grep --line-buffered "строка" |\
 grep --line-buffered -e method -e ":" -e '""' -e срочность -e уведомление -v |\
 grep --line-buffered '.*(?=строка)|(?<=строка).*' -oPi |\
 grep --line-buffered -v '^\s*$' |\
 тс |\
 xargs -I '{}' -d '\n' echo -e {} >> $logfile

РЕДАКТИРОВАТЬ: теперь я добавил его в systemd как пользователь, выполнив следующие действия.

Сначала добавьте файл .service в /home/пользователь/.config/systemd/пользователь. Затем выполните:

sudo systemctl демон-перезагрузка
systemctl --user включить notifylog.service
systemctl --user запустить notifylog.service
systemctl --статус пользователя notifylog.service

Это запустит службу правильно, но если я перезагружу свою машину,

systemctl --статус пользователя notifylog.service

дает мне:

▪ notifylog.service — журнал отправки уведомлений
     Загружено: загружено (/home/user/.config/systemd/user/notifylog.service; включено; предустановка поставщика: включена)
     Активный: неактивный (мертвый)

Чего мне сейчас не хватает?

bac0n avatar
флаг cn
У вас такая же проблема с systemd?
kurokirasama avatar
флаг us
Я изучаю, как это сделать с помощью systemd... первый раз пытаюсь
kurokirasama avatar
флаг us
@бекон, это не сработало :(
kurokirasama avatar
флаг us
@ bac0n Я обновил вопрос своими результатами
Рейтинг:1
флаг us

До сих пор работало изменение WantedBy раздел:

[Ед. изм]
Описание=уведомить-отправить журнал

[Оказание услуг]
ExecStart=/путь/к/файлу/notifylog
Перезапустить = всегда

[Установить]
WantedBy=default.target
Рейтинг:0
флаг cn

Вы, вероятно, не должны анализировать dbus-монитор в текстовом режиме, лучше использовать JSON:

#!/бин/баш

coproc P {
    exec busctl --user --json=короткий \
    --match="interface=org.freedesktop.Notifications,member=Notify" монитор
}

формат='%s
Приложение: %s\nЗначок: %s\nСводка: %s\nТело: %s\n'

при чтении -ru ${P[0]}; делать
    файл карты -t < <( \
        jq '.payload.data[0,2,3,4]' <<< "$ REPLY" \
    )
    printf "$format" "-- Уведомление --" "${MAPFILE[@]}" | тс
сделано

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.