Tôi có một tập lệnh mà tôi muốn thực thi trước khi máy bị tắt hoặc khởi động lại:
/etc/init.d/init.sh
#!/bin/sh
### BẮT ĐẦU THÔNG TIN BAN ĐẦU
# Cung cấp: init.sh
# Bắt buộc-Bắt đầu: $all
# Bắt buộc-Dừng:
# Mặc định-Bắt đầu: 2 3 4 5
# Dừng mặc định: 0 1 6
# Mô tả ngắn: xxx
# Mô tả: xxx
### KẾT THÚC THÔNG TIN BAN ĐẦU
nếu [ "$1" = "bắt đầu" ]; sau đó
tiếng vang "thông điệp tường trình"
su - azureuser -c '/bin/bash /my/script/dir/script1.sh'
tiếng vang "thông điệp tường trình"
su - azureuser -c '/bin/bash /my/script/dir/script2.sh -p "parameter2"'
fi
nếu [ "$1" = "dừng lại" ]; sau đó
tiếng vang "thông điệp tường trình"
su - azureuser -c '<một số lệnh shell>'
cd /my/script/dir/sub
./script3.sh tham số3
su - azureuser -c 'cd /my/script/dir/sub; ./script4.sh tham số4 --option1 --option2 --option3 somevalue'
fi
thoát 0
(Tôi đã xáo trộn các đường dẫn và tên tệp nhưng vẫn giữ lại cấu trúc tổng thể cho chuỗi này, rõ ràng là không có tên nào giống như ở đây)
Tập lệnh chạy tốt trong khi khởi động, nhưng phàn nàn rằng việc dọn dẹp lẽ ra phải xảy ra trong dừng lại
khối không được thực hiện và tôi không thể thấy bất kỳ thông báo tường trình nào bắt nguồn từ dừng lại
chặn trong nhật ký hệ thống. Chạy tập lệnh từ dòng lệnh (Sudo /etc/init.d/init.sh dừng lại
) hoạt động như một cơ duyên với cả hai bắt đầu
và dừng lại
các tham số, vì vậy tôi bối rối không biết tại sao nó không hoạt động khi tôi dừng máy, khá chắc chắn rằng các tập lệnh runlevel chạy với quyền root.
liên kết tượng trưng tồn tại trên hệ thống của tôi:
/etc/rc0.d/K01init.sh
/etc/rc1.d/K01init.sh
/etc/rc2.d/S99init.sh
/etc/rc3.d/S99init.sh
/etc/rc4.d/S99init.sh
/etc/rc5.d/S99init.sh
/etc/rc6.d/K01init.sh
tất cả đều trỏ đến cùng một kịch bản v.v./init.d/init.sh. Dựa trên một chủ đề khác, tôi cũng đã thử mà không có .sh
hậu tố, không thay đổi bất cứ điều gì.
Quyền cho kịch bản1
và kịch bản2
là cả hai 750
va cho kịch bản3
và kịch bản4
thậm chí 755.
Tôi đang đi sai ở đâu đây? Tôi đang chạy Ubuntu 18.04 và runlevel hiện tại của tôi là 5 (nhưng điều đó không liên quan, vì ở đây nó phải là khoảng 0 & 6). Bản thân tập lệnh (bao gồm cả tập lệnh phụ) không được thảo luận ở đây, nó hoạt động tốt trong môi trường khác và chạy thủ công dẫn đến trạng thái mong muốn trong môi trường này, vì vậy thiết lập (hoặc hiểu biết) của tôi về tập lệnh init phải sai ở đâu đó.
Nếu có liên quan: Tôi đang nói về việc khởi động lại cả hai thông qua khởi động lại sudo
và thông qua GUI Azure (đó là một máy ảo), không chắc cơ chế khởi động lại Azures có khác không. Cả hai cách đều không hiệu quả.