ฉันจะเรียกใช้สคริปต์เมื่อเริ่มต้นบน Ubuntu Server 17.10 ได้อย่างไร


13

ฉันจะรันสคริปต์เมื่อเริ่มต้นบนเครื่อง Ubuntu Server 17.10 ได้อย่างไร ฉันคิดว่าวิธีนี้มีการเปลี่ยนแปลงใน 17.10

คำตอบ:


14

ใส่สคริปต์ในการใช้งานที่เหมาะสมของ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)


2

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แล้วก็ตั้งค่าให้

ขั้นตอนพื้นฐาน

  1. เขียนสคริปต์ที่คุณต้องการให้ทำงานเมื่อเริ่มต้นใช้งานnanoหรือแก้ไขที่คุณต้องการ ให้แน่ใจว่าคุณรวม shebang ที่เหมาะสมที่ด้านบนสุดของไฟล์ ( #!/bin/bashสคริปต์ทุบตี) chmodและให้สิทธิ์ในการปฏิบัติการด้วย

  2. เพียงแค่เขียนถึงบริการของคุณในไฟล์ชื่อ my_service.service และคัดลอกลงใน directoy cp my_service.service /lib/systemd/system/ที่เหมาะสมกับ

  3. เริ่มบริการของคุณ: sudo systemctl start my_service.service. การดำเนินการนี้จะเปิดใช้งานสคริปต์ที่คุณแจ้งให้บริการของคุณเรียกใช้ คำสั่งเดียวกันกับ "หยุด" แทนที่จะเริ่มจะปิด

  4. 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 หวังว่านี่จะช่วยได้!


2
ขอบคุณที่นำมุมมอง systemd มาสู่คำถามนี้! ฉันจะชี้ให้เห็นว่าไม่จำเป็นต้องบังคับให้แบ็คกราวน์ในบรรทัด ExecStart
Jeff Schaller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.