Puncte:0

Nu pot menține un script bash în viață

drapel us

Am găsit și am modificat ușor următorul script, care monitorizează notifica-trimite notificări și aruncați-le într-un fișier.

#!/bin/bash

jurnal=$1

dbus-monitor "interface='org.freedesktop.Notificări'" |\
 grep --line-buffered "șir" |\
 grep --line-buffered -e method -e ":" -e '""' -e urgent -e notify -v |\
 grep --line-buffered '.*(?=șir)|(?<=șir).*' -oPi |\
 grep --line-buffered -v '^\s*$' |\
 ts |\
 xargs -I '{}' -d '\n' echo -e {} >> $logfile

Dacă îl rulez manual:

notifylog notifylog.txt

procesul continuă să funcționeze o vreme, dar în cele din urmă se oprește. Dacă îl adaug la crontab cum ar fi:

@reboot /path/to/file/notifylog /home/user/notifylog.txt

se execută o dată și apoi se oprește (sau rulează foarte puțin).

Am încercat chiar să-l adaug la aplicațiile de pornire precum:

/path/to/file/notifylog /home/user/notifylog.txt

si acelasi rezultat. Următoarele funcționează atunci când sunt executate manual, dar nu din aplicații crontab sau de pornire:

#!/bin/bash

logfile='/home/user/notifylog.txt'
rm -f $logfile
atingeți $logfile

în timp ce adevărat; face /path/to/file/notifylog $logfile && break;terminat

Am adăugat la systemd cu următorii pași:

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

apoi am adaugat:

[Unitate]
Descriere = jurnal de notificare-trimitere

[Serviciu]
ExecStart=/cale/la/fișier/notifylog

[Instalare]
WantedBy=multi-user.target

atunci:

sudo systemctl daemon-reload
sudo systemctl enable notifylog.service
sudo systemctl start notifylog.service
sudo systemctl status notifylog.service

ultimul imi da:

â notifylog.service - jurnal de notificare-trimitere
     Încărcat: încărcat (/lib/systemd/system/notifylog.service; activat; prestabilit furnizor: activat)
     Activ: inactiv (mort) din miercuri 2021-10-20 19:01:49 -03; acum 3 min 52 s
    Proces: 364180 ExecStart=/path/to/file/notifylog (code=exited, status=0/SUCC>
   PID principal: 364180 (cod=ieșit, stare=0/SUCCESS)

20 oct 19:01:49 mymachine systemd[1]: A început jurnalul de notificare-trimitere.
20 oct 19:01:49 mymachine notifylog[364186]: Eșuat la deschiderea conexiunii la magistrala de sesiune: Imposibil de lansare automată a unui dbus-daemon fără $DISPLAY pentru X11
20 oct 19:01:49 mymachine systemd[1]: notifylog.service: Reușit.

Se pare că nu funcționează.

Pentru asta am modificat putin scriptul:

#!/bin/bash

logfile='/home/user/notifylog.txt'
rm -f $logfile
atingeți $logfile

dbus-monitor "interface='org.freedesktop.Notificări'" |\
 grep --line-buffered "șir" |\
 grep --line-buffered -e method -e ":" -e '""' -e urgent -e notify -v |\
 grep --line-buffered '.*(?=șir)|(?<=șir).*' -oPi |\
 grep --line-buffered -v '^\s*$' |\
 ts |\
 xargs -I '{}' -d '\n' echo -e {} >> $logfile

EDIT: acum l-am adăugat la systemd ca utilizator cu următorii pași

Mai întâi, adăugați fișierul .service la /home/user/.config/systemd/user. Apoi executați:

sudo systemctl daemon-reload
systemctl --user enable notifylog.service
systemctl --user start notifylog.service
systemctl --starea utilizatorului notifylog.service

Acest lucru pornește serviciul corect, dar dacă îmi repornesc aparatul,

systemctl --starea utilizatorului notifylog.service

imi da:

â notifylog.service - jurnal de notificare-trimitere
     Încărcat: încărcat (/home/user/.config/systemd/user/notifylog.service; activat; prestabilit furnizor: activat)
     Activ: inactiv (mort)

Ce îmi lipsește acum?

bac0n avatar
drapel cn
Aveți aceeași problemă cu systemd?
kurokirasama avatar
drapel us
Mă uit la cum să o fac cu systemd... prima dată când încerc
kurokirasama avatar
drapel us
@bacon nu a mers :(
kurokirasama avatar
drapel us
@bac0n Am actualizat întrebarea cu rezultatele mele
Puncte:1
drapel us

Ceea ce a funcționat până acum a fost schimbarea WantedBy secțiune:

[Unitate]
Descriere = jurnal de notificare-trimitere

[Serviciu]
ExecStart=/cale/la/fișier/notifylog
Restart=intotdeauna

[Instalare]
WantedBy=default.target
Puncte:0
drapel cn

Probabil nu ar trebui să analizați dbus-monitor în modul text, o utilizare mai bună JSON:

#!/bin/bash

coproc P {
    exec busctl --user --json=scurt \
    --match="interface=org.freedesktop.Notifications,member=Notify" monitor
}

format='%s
Aplicație: %s\npictogramă: %s\nRezumat: %s\nCorp: %s\n'

while read -ru ${P[0]}; do
    mapfile -t < <( \
        jq '.payload.data[0,2,3,4]' <<< "$REPLY" \
    )
    printf "$format" "-- Notificare --" "${MAPFILE[@]}" | ts
Terminat

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.