Điểm:0

Tôi không thể giữ một tập lệnh bash tồn tại

lá cờ us

Tôi đã tìm thấy và sửa đổi một chút đoạn script sau, để theo dõi gửi thông báo thông báo và kết xuất chúng trong một tệp.

#!/bin/bash

logfile=$1

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

Nếu tôi chạy thủ công:

thông báo thông báo thông báolog.txt

quá trình tiếp tục hoạt động trong một thời gian nhưng cuối cùng dừng lại. Nếu tôi thêm nó vào crontab như:

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

nó thực hiện một lần rồi dừng lại (hoặc nó chạy rất ít).

Tôi thậm chí đã thử thêm nó vào các ứng dụng khởi động như:

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

và cùng một kết quả. Các hoạt động sau đây khi được thực thi thủ công nhưng không phải từ crontab hoặc ứng dụng khởi động:

#!/bin/bash

logfile='/home/user/notifylog.txt'
rm -f $logfile
chạm vào $logfile

trong khi đúng; làm /path/to/file/notifylog $logfile && break;xong

Tôi đã thêm vào systemd theo các bước sau:

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

sau đó tôi nói thêm:

[Đơn vị]
Mô tả=thông báo-gửi nhật ký

[Dịch vụ]
ExecStart=/path/to/file/notifylog

[Cài đặt]
WantedBy=multi-user.target

sau đó:

Sudo systemctl daemon-tải lại
Sudo systemctl bật thông báolog.service
Sudo systemctl bắt đầu thông báolog.service
Sudo systemctl status infolog.service

cái cuối cùng mang lại cho tôi:

â notifylog.service - nhật ký thông báo-gửi
     Đã tải: đã tải (/lib/systemd/system/notifylog.service; đã bật; giá trị đặt sẵn của nhà cung cấp: đã bật)
     Đang hoạt động: không hoạt động (đã chết) kể từ Thứ tư 2021-10-20 19:01:49 -03; 3 phút 52 giây trước
    Quá trình: 364180 ExecStart=/path/to/file/notifylog (code=exited, status=0/SUCC>
   PID chính: 364180 (mã=đã thoát, trạng thái=0/THÀNH CÔNG)

ngày 20 tháng 10 19:01:49 mymachine systemd[1]: Đã bắt đầu nhật ký thông báo-gửi.
ngày 20 tháng 10 19:01:49 mymachine notifylog[364186]: Không thể mở kết nối với bus phiên: Không thể tự động khởi chạy dbus-daemon mà không có $DISPLAY cho X11
ngày 20 tháng 10 19:01:49 mymachine systemd[1]: notifylog.service: Đã thành công.

Nó dường như không chạy.

Đối với điều này, tôi đã sửa đổi kịch bản một chút:

#!/bin/bash

logfile='/home/user/notifylog.txt'
rm -f $logfile
chạm vào $logfile

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

CHỈNH SỬA: bây giờ tôi đã thêm nó vào systemd với tư cách là người dùng theo các bước sau

Đầu tiên, thêm tệp .service vào /home/user/.config/systemd/user. Sau đó thực hiện:

Sudo systemctl daemon-tải lại
systemctl --user kích hoạt notifylog.service
systemctl --user bắt đầu thông báolog.service
systemctl --user status notifylog.service

Điều này khởi động dịch vụ một cách chính xác, nhưng nếu tôi khởi động lại máy của mình,

systemctl --user status notifylog.service

đưa cho tôi:

â notifylog.service - nhật ký thông báo-gửi
     Đã tải: đã tải (/home/user/.config/systemd/user/notifylog.service; đã bật; giá trị đặt sẵn của nhà cung cấp: đã bật)
     Đang hoạt động: không hoạt động (đã chết)

Những gì tôi đang thiếu bây giờ?

bac0n avatar
lá cờ cn
Bạn gặp vấn đề tương tự với systemd?
kurokirasama avatar
lá cờ us
Tôi đang tìm hiểu cách thực hiện với systemd... lần đầu tiên thử
kurokirasama avatar
lá cờ us
@bacon nó không hoạt động :(
kurokirasama avatar
lá cờ us
@bac0n Tôi đã cập nhật câu hỏi với kết quả của mình
Điểm:1
lá cờ us

Những gì hiệu quả cho đến nay là thay đổi MuốnBy tiết diện:

[Đơn vị]
Mô tả=thông báo-gửi nhật ký

[Dịch vụ]
ExecStart=/path/to/file/notifylog
Khởi động lại = luôn luôn

[Cài đặt]
WantedBy=default.target
Điểm:0
lá cờ cn

Có lẽ bạn không nên phân tích cú pháp màn hình dbus ở chế độ văn bản, sử dụng tốt hơn JSON:

#!/bin/bash

coproc P {
    exec busctl --user --json=short \
    --match="interface=org.freedesktop.Notifications,member=Notify" màn hình
}

định dạng='%s
Ứng dụng: %s\nBiểu tượng: %s\nTóm tắt: %s\nNội dung: %s\n'

trong khi đọc -ru ${P[0]}; làm
    mapfile -t < <( \
        jq '.payload.data[0,2,3,4]' <<< "$REPLY" \
    )
    printf "$format" "-- Thông báo --" "${MAPFILE[@]}" | ts
xong

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.