[GIẢI QUYẾT]
Đôi khi, bướng bỉnh một chút là cách tốt để tìm ra giải pháp. Tuy nhiên, cảm ơn vì những đóng góp của bạn.
Sau một số nghiên cứu dựa trên liên kết của nhận xét trước đây của tôi (câu trả lời của Sebastian Stark), tôi đã kết thúc với tập lệnh này (hãy gọi nó là âmyoffscriptâ) trong thư mục /etc/init.d của mình:
#!/bin/sh
### BẮT ĐẦU THÔNG TIN BAN ĐẦU
# Bắt buộc-Bắt đầu: $local_fs
# Bắt buộc-Dừng: $local_fs
# Cung cấp: Shutdown hoặc Reboot Exec
# Mặc định-Bắt đầu: 4
# Dừng mặc định: 0 6
# Mô tả: Tắt máy hoặc Khởi động lại
### KẾT THÚC THÔNG TIN BAN ĐẦU
trường hợp "$1" trong
dừng lại)
echo $(date) >> /ZZZdate # THAY THẾ VÍ DỤ TRƯỚC: THỰC HIỆN CÁC LỆNH TẮT/KHỞI ĐỘNG LẠI TẠI ĐÂY
;;
thoát hiểm
thoát 0
Về kịch bản trên, điều quan trọng nhất cần làm nổi bật là:
1 - Tiêu đề LSB (Linux Standard Base) â âDefault-Startâ và âDefault-Stopâ phải có cả hai mức chạy, tương ứng với â0â để tắt máy (rc0.d) và â6â để khởi động lại (rc6.d). Vì tập lệnh của tôi chỉ dành cho tắt máy và khởi động lại và âDefault-Startâ phải được chỉ định, nên tôi đã chọn 4â (rc4.d) phù thủy không được sử dụng/người dùng có thể xác định. Nhưng nó phải chạy ở mức â2â (rc2.d) nếu cần khởi động thứ gì đó khi khởi động (như dịch vụ, daemon,â¦)
2 - Tuyên bố trường hợp - Khi tập lệnh được thực thi bởi hệ thống như một dịch vụ với các đối số âstartâ hoặc âstopâ theo Default-Startâ và Default-Stopâ từ tiêu đề LSB, tất cả các lệnh phải nằm trong thùng máy bản tường trình. (Các lệnh trước câu lệnh tình huống đã bị bỏ qua trong các thử nghiệm của tôi.) Tương ứng với các mức chạy â0â và â6â, câu lệnh trường hợp của tôi chỉ có dừng lại) tùy chọn, nhưng nếu chạy lúc khởi động là cần thiết, một bắt đầu) nên bao gồm tùy chọn (và mức chạy â2â phải được chỉ định trong tiêu đề LSB âDefault-Startâ).
Bây giờ, hãy làm cho nó hoạt động.
Trước tiên, làm cho tập lệnh /etc/init.d/myoffscript có thể thực thi được.
Sau đó, chúng tôi có hai tùy chọn - với một chỉ huy hoặc thủ công.
Với một lệnh:
# systemctl kích hoạt myoffscript
hoặc
# /lib/systemd/systemd-sysv-install kích hoạt myoffscript
Các liên kết tượng trưng tương đối sẽ được tạo tự động trong các thư mục rc*.d tương ứng (S01myoffscript trong rc4.d và K01myoffscript trong rc0.d và rc6.d theo tập lệnh ở trên)
Các lệnh sẽ chỉ hoạt động nếu các liên kết không được tạo trước đó. Nếu không sẽ báo lỗi.
thủ công:
Từ mỗi thư mục rc*.d tạo liên kết tượng trưng
# cd /etc/rc4.d
# ln -s ../init.d/myoffscript S01myoffscript
# cd /etc/rc0.d
# ln -s ../init.d/myoffscript K01myoffscript
# cd /etc/rc6.d
# ln -s ../init.d/myoffscript K01myoffscript
Lưu ý: nếu mức chạy â2â được chỉ định trong âDefault-Startâ, liên kết đầu tiên sẽ được tạo trong /etc/rc2.d, v.v...
Khởi động lại hệ thống và mọi thứ sẽ hoạt động.
Đây là cách duy nhất mà tôi đã tìm thấy để chạy tập lệnh với quyền root khi tắt máy và khởi động lại với Ubuntu 20.04
Lưu ý: Mặc dù /etc/int.d và /etc/rc2.d links vẫn hoạt động để chạy tập lệnh/lệnh khi khởi động, như đã đề cập trong liên kết nhận xét trước đây của tôi, một cách tiếp cận dài hạn sẽ là chuyển đổi tập lệnh init sang đơn vị dịch vụ systemd, do đó, tiêu đề LBS với phương pháp câu lệnh tình huống được mô tả ở trên có thể hữu ích cho các tập lệnh/lệnh khởi động trong một thời gian.