ฉันมีสคริปต์ที่เปิดใช้งาน wifi โดยอัตโนมัติโดยไม่ใช้เครือข่ายผู้จัดการ แต่ฉันไม่ทราบวิธีเรียกใช้สคริปต์ในฐานะรูทขณะที่ระบบกำลังบูท ฉันจะทำให้สคริปต์ทำงานโดยอัตโนมัติในระหว่างการบูตได้อย่างไร
ฉันมีสคริปต์ที่เปิดใช้งาน wifi โดยอัตโนมัติโดยไม่ใช้เครือข่ายผู้จัดการ แต่ฉันไม่ทราบวิธีเรียกใช้สคริปต์ในฐานะรูทขณะที่ระบบกำลังบูท ฉันจะทำให้สคริปต์ทำงานโดยอัตโนมัติในระหว่างการบูตได้อย่างไร
คำตอบ:
วางสคริปต์ที่คุณต้องการรันในไดเร็กทอรี /etc/init.d และทำให้สคริปต์สามารถเรียกทำงานได้
chmod 755 myscript
หลังจากนั้นให้สร้างลิงก์สัญลักษณ์ในไดเรกทอรีระดับการทำงานที่คุณต้องการใช้ตัวอย่างเช่นหากคุณต้องการเรียกใช้โปรแกรมในกราฟิกรันเลเวล 2 กราฟิกระดับเริ่มต้นสำหรับ Ubuntu คุณต้องวางไว้ใน/etc/rc2.dไดเรกทอรี คุณไม่สามารถวางไดเรคทอรีนั้นได้คุณจะต้องบ่งบอกว่ามันจะรันเมื่อใดโดยการระบุการเริ่มต้นด้วย“ S” และลำดับการดำเนินการเป็นสิ่งสำคัญ วางหลังจากทุกอย่างอื่นที่อยู่ในไดเรกทอรีโดยให้เป็นตัวเลขที่สูงขึ้น
ถ้าสคริปต์สุดท้ายที่จะทำงานเป็นrc.localและมันเป็นชื่อแล้วคุณจะต้องเพิ่มสคริปต์ของคุณเป็นS99rc.localS99myscript
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.servicedisable_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.dcrontabดูสิ่งนี้: unix.stackexchange.com/a/525845/43233