ฉันมีสคริปต์ที่เปิดใช้งาน wifi โดยอัตโนมัติโดยไม่ใช้เครือข่ายผู้จัดการ แต่ฉันไม่ทราบวิธีเรียกใช้สคริปต์ในฐานะรูทขณะที่ระบบกำลังบูท ฉันจะทำให้สคริปต์ทำงานโดยอัตโนมัติในระหว่างการบูตได้อย่างไร
ฉันมีสคริปต์ที่เปิดใช้งาน wifi โดยอัตโนมัติโดยไม่ใช้เครือข่ายผู้จัดการ แต่ฉันไม่ทราบวิธีเรียกใช้สคริปต์ในฐานะรูทขณะที่ระบบกำลังบูท ฉันจะทำให้สคริปต์ทำงานโดยอัตโนมัติในระหว่างการบูตได้อย่างไร
คำตอบ:
วางสคริปต์ที่คุณต้องการรันในไดเร็กทอรี /etc/init.d และทำให้สคริปต์สามารถเรียกทำงานได้
chmod 755 myscript
หลังจากนั้นให้สร้างลิงก์สัญลักษณ์ในไดเรกทอรีระดับการทำงานที่คุณต้องการใช้ตัวอย่างเช่นหากคุณต้องการเรียกใช้โปรแกรมในกราฟิกรันเลเวล 2 กราฟิกระดับเริ่มต้นสำหรับ Ubuntu คุณต้องวางไว้ใน/etc/rc2.d
ไดเรกทอรี คุณไม่สามารถวางไดเรคทอรีนั้นได้คุณจะต้องบ่งบอกว่ามันจะรันเมื่อใดโดยการระบุการเริ่มต้นด้วย“ S” และลำดับการดำเนินการเป็นสิ่งสำคัญ วางหลังจากทุกอย่างอื่นที่อยู่ในไดเรกทอรีโดยให้เป็นตัวเลขที่สูงขึ้น
ถ้าสคริปต์สุดท้ายที่จะทำงานเป็นrc.local
และมันเป็นชื่อแล้วคุณจะต้องเพิ่มสคริปต์ของคุณเป็นS99rc.local
S99myscript
ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
แต่ละ/etc/rc*.d
ไดเรกทอรีที่เข้ากันได้ย้อนหลังมีลิงค์สัญลักษณ์ไปยัง/etc/init.d/
ไดเรกทอรี
/etc/rc2.d
แทนrc3.d
ตามที่ระบุในตัวอย่าง ดูเหมือนว่าrc2.d
ไม่ใช่แค่ระดับการรันแบบกราฟิก
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.d
จะนำคุณไปยัง/etc/rc?.d
ไดเรกทอรีที่สอดคล้องกับระดับเริ่มต้นของคุณ
rc.local
และตั้งชื่อS99rc.local
จากนั้นคุณจะต้องเพิ่มสคริปต์ของคุณเป็นS99myscript
" คุณหมายถึง: "ถ้าสคริปต์สุดท้ายที่จะรันmyscript
และมีชื่อS99myscript
คุณต้องเพิ่มสคริปต์ของคุณเป็นS99myscript
" ???
รวมคำสั่ง/etc/rc.local
ด้วย มันจะถูกเรียกใช้เมื่อใดก็ตามที่มีการเปลี่ยนแปลงระดับผู้ใช้งาน
หมายเหตุ: คุณต้องใส่คำสั่งก่อนบรรทัดสุดท้ายใน /etc/rc.local ที่มี: "exit 0"
/etc/rc.local
ที่มี: exit 0
/etc/rc.local
ในอูบุนตู 15.10 มีความคิดเห็นว่า "สคริปต์นี้จะถูกดำเนินการในตอนท้ายของแต่ละระดับผู้ใช้หลายคน" ดังนั้นสคริปต์สามารถทำงานได้หลายครั้งระหว่างการบูตใช่ไหม
ใช้crontab
ตัวเลือกเพื่อให้สคริปต์ของคุณทำงานหลังจากรีบูต
คุณสามารถทำได้โดยการเพิ่ม@reboot
รหัสในcron
เปิด crontab โดยผู้ใช้รูท:
$ sudo crontab -e
เพิ่มระเบียนถัดไปที่ด้านล่าง:
@reboot yourScriptPath
นั่นจะทำสิ่งที่คุณต้องการ
crontab -e
ซึ่งไม่ต้องการสิทธิ์ผู้ใช้ขั้นสูงหรือไม่ ฉันสงสัยว่าถ้ามันสามารถเรียกใช้สคริปต์ที่ต้องทำงานเป็น root
sudo crontab -e
เพื่อให้มันรันสคริปต์เป็น root ในระหว่างการเริ่มต้น
/var/run/crond.reboot
ถ้าไม่จะไม่ทำงาน
สิ่งนี้ใช้ได้กับฉันใน Ubuntu 17.04:
สร้างไฟล์สคริปต์ทัวร์อย่างdisable_cdrom
สะดวกสำหรับคุณ home/yterle/disable_cdrom
ในกรณีของฉัน ในกรณีของฉัน:
#!/bin/sh
eject /dev/sr0 -i 1
ทำให้ปฏิบัติการได้ chmod 775 disable_cdrom
/etc/systemd/system
และสร้างservice
ไฟล์ขึ้นมา ตัวอย่างเช่นsudo gedit /etc/systemd/system/disable_cdrom.service
disable_cdrom.service
หน้าตาของฉันเป็นแบบนี้:
[Unit]
Description=Disable cdrom
[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom
[Install]
WantedBy=multi-user.target
ไหนExecStart
ชี้ไปเรียกใช้สคริปต์ของคุณด้วย/bin/sh
จากนั้นเรียกใช้systemctl enable disable_cdrom.service
เพื่อเปิดใช้งานบริการ systemd
systemctl enable disable_cdrom.service
รวมไฟล์สคริปต์ของคุณไว้/etc/init.d/
ด้วยด้วยสิทธิ์อนุญาตจากนั้นตั้งระดับการทำงานที่แตกต่างกัน
$ update-rc.d script-name default
มันจะทำให้สคริปต์ของคุณในการเริ่มต้นการบูต
update-rc.d script-name enable
อะไร
สร้างไฟล์ข้อความแบบนี้ใน/etc/cron.d/
:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot root yourScriptPath
(คุณควรแทนที่yourScriptPath
ด้วยพา ธ ไปยังสคริปต์ที่คุณต้องการเรียกใช้)
ระมัดระวังในการเพิ่มสคริปต์ไปrc.local
- ฉันติดอยู่ในหน้าจอสแปลชเพราะมัน การกดAlt+ F1เปิดเผยสิ่งที่เกิดขึ้นด้านหลังหน้าจอเริ่มต้น (สคริปต์rc.local
กำลังทำงานอยู่)
ฉันไม่สามารถออกไปได้
ไม่มีอะไรทำงาน
ฉันต้องบูตจากอิมเมจ USB Ubuntu ค้นหาrc.local
ให้สิทธิ์ตัวเองในการไฟล์และลบทิ้ง ฉันเดาว่าคุณไม่ควรทำอะไรถ้าคุณไม่รู้ว่าคุณกำลังทำอะไรอยู่
autostart
แสดงออกหรือ*.service
ไฟล์ในหลายสถานที่เช่นเดียวกับในหรือinit.d
crontab
ดูสิ่งนี้: unix.stackexchange.com/a/525845/43233