Tôi đã có một tập lệnh tự động kích hoạt wifi mà không cần sử dụng trình điều khiển mạng, nhưng tôi không biết cách chạy tập lệnh dưới quyền root trong khi hệ thống đang khởi động. Làm cách nào để tập lệnh chạy tự động trong khi khởi động?
Tôi đã có một tập lệnh tự động kích hoạt wifi mà không cần sử dụng trình điều khiển mạng, nhưng tôi không biết cách chạy tập lệnh dưới quyền root trong khi hệ thống đang khởi động. Làm cách nào để tập lệnh chạy tự động trong khi khởi động?
Câu trả lời:
Đặt tập lệnh bạn muốn chạy trong thư mục /etc/init.d và làm cho tập lệnh thực thi.
chmod 755 myscript
Khi đã xong, hãy tạo một liên kết tượng trưng trong thư mục cấp độ chạy mà bạn muốn sử dụng, ví dụ nếu bạn muốn chạy một chương trình trong đồ họa runlevel 2, runlevel mặc định cho Ubuntu, bạn sẽ đặt nó vào /etc/rc2.d
thư mục. Bạn chỉ không thể đặt nó vào thư mục, bạn phải biểu thị khi nào nó sẽ chạy bằng cách chỉ ra phần khởi động với một S Siết và thứ tự thực hiện là quan trọng. Đặt nó sau mọi thứ khác trong thư mục bằng cách cho nó một số cao hơn.
Nếu tập lệnh cuối cùng được chạy là rc.local
và nó được đặt tên S99rc.local
thì bạn cần thêm tập lệnh của mình dưới dạng S99myscript
.
ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
Mỗi /etc/rc*.d
thư mục tương thích ngược có các liên kết tượng trưng đến /etc/init.d/
thư mục.
/etc/rc2.d
, thay vì rc3.d
như được chỉ ra trong ví dụ. Có vẻ như rc2.d
không chỉ là mức độ chạy đồ họa.
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.d
sẽ đưa bạn đến /etc/rc?.d
thư mục tương ứng với runlevel mặc định của bạn.
rc.local
và nó được đặt tên S99rc.local
thì bạn cần thêm tập lệnh của mình dưới dạng S99myscript
.". Ý của bạn là: "Nếu tập lệnh cuối cùng được chạy là myscript
và nó được đặt tên S99myscript
thì bạn cần thêm tập lệnh của mình vào S99myscript
." ???
Bao gồm các lệnh trong /etc/rc.local
. Nó sẽ được chạy bất cứ khi nào runlevel của người dùng thay đổi.
Lưu ý: Bạn phải đặt lệnh trước dòng cuối cùng trong /etc/rc.local có chứa: "exit 0".
/etc/rc.local
có chứa: exit 0
/etc/rc.local
trong ubfox 15.10 có nhận xét rằng "Kịch bản này được thực thi ở cuối mỗi runlevel nhiều người dùng." Vì vậy, kịch bản có thể được chạy nhiều lần trong khi khởi động, phải không?
Sử dụng một crontab
tùy chọn để làm cho tập lệnh của bạn chạy sau khi khởi động lại,
bạn có thể làm điều đó bằng cách thêm @reboot
mã trong cron
Mở crontab bởi người dùng root:
$ sudo crontab -e
Thêm bản ghi tiếp theo ở dưới cùng:
@reboot yourScriptPath
Điều đó sẽ làm những gì bạn muốn.
crontab -e
, không cần đặc quyền siêu người dùng? Tôi tự hỏi, nếu nó có thể chạy các kịch bản cần phải được chạy như root.
sudo crontab -e
để làm cho nó chạy tập lệnh dưới dạng root trong khi khởi động.
/var/run/crond.reboot
, nếu không, sẽ không thực thi nhiệm vụ
Điều này làm việc cho tôi trên Ubuntu 17.04:
tạo tập tin kịch bản du lịch như disable_cdrom
thuận tiện cho bạn vị trí. Trong trường hợp của tôi home/yterle/disable_cdrom
. Trong trường hợp của tôi:
#!/bin/sh
eject /dev/sr0 -i 1
làm cho nó thực thi chmod 775 disable_cdrom
/etc/systemd/system
và tạo ra một service
tập tin Ví dụsudo gedit /etc/systemd/system/disable_cdrom.service
Tôi disable_cdrom.service
trông như thế này:
[Unit]
Description=Disable cdrom
[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom
[Install]
WantedBy=multi-user.target
Nơi ExecStart
để chạy tập lệnh của bạn với/bin/sh
Sau đó chạy systemctl enable disable_cdrom.service
để kích hoạt dịch vụ systemd
systemctl enable disable_cdrom.service
Bao gồm tệp Script của bạn /etc/init.d/
với quyền Thực thi, sau đó đặt mức chạy khác nhau
$ update-rc.d script-name default
Nó sẽ đặt tập lệnh của bạn khi khởi động khởi động.
update-rc.d script-name enable
sao
Cẩn thận với việc thêm tập lệnh vào rc.local
- Tôi bị kẹt trong màn hình giật gân vì nó. Nhấn Alt+ F1tiết lộ những gì đang diễn ra đằng sau màn hình giật gân (đoạn script rc.local
đang chạy).
Tôi không thể thoát ra khỏi nó.
không có gì hoạt động
Tôi đã phải khởi động từ hình ảnh USB Ubuntu, tìm rc.local
, cấp cho mình quyền để gửi và xóa nó. Tôi đoán bạn không nên làm công cụ nếu bạn không biết những gì bạn đang làm.
autostart
tệp kê khai hoặc trong*.service
các tệp ở một số vị trí, cũng như tronginit.d
hoặccrontab
. Xem này: unix.stackexchange.com/a/525845/43233