Tôi đang cố gắng viết một tập lệnh để a) cập nhật hệ thống trước khi tắt (không phải khi khởi động lại) và hiển thị tiến trình cho người dùng trên plymouth.
Cho đến nay, tôi đã quản lý để làm cho nó khởi động tập lệnh (đôi khi?) Khi tắt máy, nhưng nó cũng bắt đầu khi khởi động lại (sẽ được sửa).
[Đơn vị]
Mô tả=Cập nhật khi tắt máy
Before=poweroff.target pause.target shutdown.target
After=mạng-online.đích nhiều người dùng.đích
[Dịch vụ]
Loại=oneshot
ExecStart=/bin/true
RemainafterExit=true
ExecStop=/usr/share/services/shutdown_update
Thời gian chờSec=vô cùng
[Cài đặt]
WantedBy=poweroff.mục tiêu dừng.mục tiêu tắt máy.mục tiêu
Kịch bản thực tế là cái này:
#!/bin/sh
fun_update() {
plymouth display-message --text "Aktualisierungen werden installiert..."
chế độ thay đổi plymouth --updates
cập nhật pkcon -p -y > /tmp/update_status.txt
cập nhật = 0
chế độ thay đổi plymouth --boot-up
plymouth display-message --text "Aufräumen..."
apt-get autoclean
apt-get autoremove
chế độ thay đổi plymouth --shutdown
}
fun_plymouth() {
trong khi [ "$update" = 1 ]
làm
cập nhật hệ thống plymouth --progress $(cat /tmp/update_status.txt | grep -oP "(?<=Percentage: ).*" | tail -1)
plymouth display-message --text "$(cat /tmp/update_status.txt | grep -oP "(?<=Percentage: ).*" | tail -1)%"
ngủ 1
xong
}
if echo systemctl list-jobs | egrep -q 'reboot.target.*start';
sau đó
thoát 0
fi
chế độ thay đổi plymouth --boot-up
cập nhật = 0
plymouth display-message --text 'Aktualisierung wird vorbereitet...'
plymouth display-message --text "Es wird nach Aktualisierungen gesucht..."
làm mới pkcon
update_list=$(pkcon get-updates)
tiếng vang $update_list
nếu ! tiếng vang "$update_list" | grep -q "Không có bản cập nhật nào vào lúc này."; sau đó
cập nhật = 1
fun_update & fun_plymouth & đợi
khác
plymouth display-message --text "Keine Aktualisierungen gefunden!"
ngủ 3
fi
tin nhắn hiển thị plymouth --text ""
Những chức năng này làm gì (hoặc những gì tôi muốn chúng làm) là để a) thông báo cho người dùng rằng hệ thống của anh ta sắp được cập nhật, b) bắt đầu cập nhật bằng pkcon và c) hiển thị phần giới thiệu cập nhật ngoại tuyến plymouth (phần giới thiệu đó là được hiển thị khi các bản cập nhật ngoại tuyến đang được cài đặt) và nhận tiến trình của pkcon để hiển thị cho người dùng (đó là lý do tại sao grep và tail -1, để chỉ nhận kết quả khớp cuối cùng).
Nhưng vì lý do nào đó, tôi cố gắng khởi động tập lệnh, nhưng không có thông báo plymouth nào được hiển thị và pkcon không khởi động hoặc khi khởi động thì không thành công.
Có thể có rất nhiều vấn đề trong tập lệnh này, tôi đã không quản lý để gỡ lỗi, vì plymouth và systemd không thực sự hữu ích.
Mọi lời khuyên đều được chào đón!
Cám ơn rất nhiều!
CHỈNH SỬA: Tôi đã cài đặt plymouth-x11 để kiểm tra tập lệnh của mình; thật thú vị, các lệnh được gửi bởi tập lệnh cũng bị bỏ qua ở đây khi chạy (ngay cả trong trình bao gốc), nhưng các lệnh chính xác này được nhập thủ công trong trình bao gốc vẫn hoạt động. Tôi cũng đã thêm dòng này để kiểm tra xem plymouth có đang chạy không:
plymouth --ping && echo plymouth đang chạy || echo plymouth KHÔNG chạy
và nó trả về nó đang chạy.
Điều này không có ý nghĩa
EDIT2: Với plymouth-x11, tôi phát hiện ra rằng việc xóa (xóa các dòng) hàm update() và plymouth(), plymouth sẽ hiển thị thông báo.Thêm lại các chức năng sẽ phá vỡ nó một lần nữa.
Ngoài ra, đặt lệnh plymouth phía trên các khai báo hàm sẽ làm cho chúng hoạt động trở lại.
EDIT3: Tôi đã xóa các chức năng và đặt mã vào một tệp bổ sung. Bây giờ nó hoạt động như mong đợi (ít nhất là trong môi trường thử nghiệm của tôi).
Vì vậy, câu hỏi là: Tại sao tập lệnh của tôi bị hỏng khi tôi thêm các chức năng?
EDIT4: Không đặt tên chức năng của bạn như một lệnh bạn muốn gọi -_-
EDIT5: Vì vậy, tập lệnh sẽ không còn gì nữa khi tôi khởi động lại, nhưng vẫn vậy: plymouth không hiển thị bất kỳ thông báo nào và tập lệnh dường như không được gọi khi tắt máy. Đây là những vấn đề tôi biết ngay bây giờ, việc kiểm tra một tập lệnh không được gọi là khá khó. Tập lệnh hoạt động khi tôi bắt đầu plymouthd theo cách thủ công với plymouth-x11.
Tôi đang chạy Ubuntu 21.04