ฉันจะรันสคริปต์เมื่อเริ่มต้นบนเครื่อง Ubuntu Server 17.10 ได้อย่างไร ฉันคิดว่าวิธีนี้มีการเปลี่ยนแปลงใน 17.10
ฉันจะรันสคริปต์เมื่อเริ่มต้นบนเครื่อง Ubuntu Server 17.10 ได้อย่างไร ฉันคิดว่าวิธีนี้มีการเปลี่ยนแปลงใน 17.10
คำตอบ:
ใส่สคริปต์ในการใช้งานที่เหมาะสมของcronตาราง (เช่นcrontab ) @rebootกับตารางเวลาของ
ผู้ใช้สามารถแก้ไขของตารางที่มีcroncrontab -e
ตัวอย่างที่จะทำงาน/path/to/script.shเมื่อเริ่มต้น:
@reboot /path/to/script.sh
หากคุณจำเป็นต้องใช้มันเป็นรากไม่ได้ใช้@reboot sudo /path/to/script.sh;
ใช้sudo crontab -eu rootเพื่อแก้ไข crontab ของรูท
ดูเพิ่มเติมที่: crontab (1), cron (8), crontab (8)
Ubuntu 15.04 และส่งต่อโดยค่าเริ่มต้นใช้สิ่งที่เรียกว่าsystemdซึ่งเป็นโปรแกรม (แปลก ๆ ) ที่ทำให้บริการเริ่มต้นและกระบวนการโดยอัตโนมัติ คุณสามารถสร้างของคุณเองและเพิ่มลงในรายการบริการเริ่มต้นได้ด้วยความพยายามเพียงเล็กน้อย
บริการ Systemd พื้นฐาน
นี่เป็น.serviceไฟล์barebones ที่สามารถใช้ในการเปิดตัวเซิร์ฟเวอร์ python gui ของฉัน (อาจเป็นเชลล์สคริปต์ก็ไม่สำคัญ):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
Descriptionตัวเลือกคือสตริงใด ๆ ที่อธิบายถึงสิ่งที่ให้บริการหรือไม่
ExecStartตัวเลือกระบุคำสั่งในการดำเนินการ ที่นี่ฉันให้เส้นทางไปยังสคริปต์ python ที่ใช้งานได้และใช้&โทเค็นเพื่อเรียกใช้งานในพื้นหลัง
WantedByความสำคัญตัวเลือกที่ระบุตามสิ่งที่เป้าหมายต้องการที่จะใช้บริการนี้ ถ้าคุณไม่จำเป็นต้องบริการของคุณจะทำงานในเวลาที่เฉพาะเจาะจงมาก ๆ multi-user.targetแล้วก็ตั้งค่าให้
ขั้นตอนพื้นฐาน
เขียนสคริปต์ที่คุณต้องการให้ทำงานเมื่อเริ่มต้นใช้งานnanoหรือแก้ไขที่คุณต้องการ ให้แน่ใจว่าคุณรวม shebang ที่เหมาะสมที่ด้านบนสุดของไฟล์ ( #!/bin/bashสคริปต์ทุบตี) chmodและให้สิทธิ์ในการปฏิบัติการด้วย
เพียงแค่เขียนถึงบริการของคุณในไฟล์ชื่อ my_service.service และคัดลอกลงใน directoy cp my_service.service /lib/systemd/system/ที่เหมาะสมกับ
เริ่มบริการของคุณ: sudo systemctl start my_service.service. การดำเนินการนี้จะเปิดใช้งานสคริปต์ที่คุณแจ้งให้บริการของคุณเรียกใช้ คำสั่งเดียวกันกับ "หยุด" แทนที่จะเริ่มจะปิด
sudo systemctl enable my_service.serviceเพิ่มบริการของคุณเพื่อกระบวนการเริ่มต้นขึ้น: หากต้องการลบออกเพียงแค่แทนที่ "เปิดใช้งาน" ด้วย "ปิดการใช้งาน" ในคำสั่งเดียวกัน
และนั่นมัน! โปรดทราบว่าสคริปต์ของคุณจะทำงานโดยอัตโนมัติด้วยการอนุญาตรูทซึ่งเป็นค่าเริ่มต้นในบริการ systemd
ตัวอย่างง่ายๆของฉัน (เต็ม)
สำหรับการอ้างอิงต่อไปนี้เป็นบริการ systemd ที่เรียบง่ายฉันมีที่เปิดตัว Python GUI Server อย่างง่ายโดยใช้ Dash:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
บริการตัวอย่างนี้ใช้สคริปต์ Python3 แต่สูตรจะเหมือนกันทุกประการสำหรับเชลล์สคริปต์
อ่านเพิ่มเติมสามารถพบได้ที่กวดวิชาที่ยอดเยี่ยมนี้โดย DigitalOcean และกระทู้ AskUbuntu นี้มีคำตอบที่ยอดเยี่ยมที่ช่วยให้ฉันเรียนรู้ systemd หวังว่านี่จะช่วยได้!