เรียกใช้แอปพลิเคชันเมื่อบู๊ตในสภาพแวดล้อมรูทจากนั้นมอนิเตอร์และหากปิดหรือเปิดใหม่อีกครั้ง


0

ฉันมีคำถามเกี่ยวกับวิธีที่ฉันสามารถเปิดแอปพลิเคชั่นเขียนด้วยไพ ธ อนทันทีที่การบู๊ตเสร็จสมบูรณ์ แอปพลิเคชันนี้จำเป็นต้องเรียกใช้ด้วยสิทธิ์แบบเต็มดังนั้นจึงไม่จำเป็นต้องใช้รหัสผ่านเนื่องจากมีสองคำสั่งที่ทำงานด้วย sudo

ฉันต้องการมันอีกครั้งเพื่อเปิดใช้งานแอปพลิเคชั่นที่มีสิทธิ์เดิมอีกครั้งหากการปิดแอปพลิเคชัน

ฉันได้ทำสิ่งที่คล้ายกัน แต่ไม่เคยทั้งหมดเข้าด้วยกัน ตัวอย่างเช่นการเปิดตัวที่บูต ฉันจะโยนสคริปต์สั้น ๆ ที่เรียกแอปพลิเคชันที่ฉันต้องการในไดเรกทอรีอื่นในไดเรกทอรี init.d จากนั้นด้วยการทำ "การตั้งค่าเริ่มต้นของแอพ update-rc.d" มันจะเปิดอัตโนมัติโดยเป็นส่วนหนึ่งของสคริปต์เริ่มต้นสำหรับ Ubuntu

สำหรับการเรียกใช้โปรแกรมอีกครั้งหากเกิดข้อขัดข้องสคริปต์อื่น ๆ

#!/usr/bin/python
from subprocess import Popen
import sys

filename = sys.argv[1]
while True:
    print("\nStarting " + filename)
    p = Popen("python " + filename, shell=True)
    p.wait()

ทำงานให้เสร็จลุล่วง ฉันสามารถใส่ชื่อแอปพลิเคชันที่ชื่อไฟล์ดังนั้นฉันไม่ต้องระบุชื่อเป็นส่วนหนึ่งของข้อโต้แย้งเมื่อฉันเรียกมัน

ปัญหาหลักของฉันคือแอพพลิเคชั่นที่ฉันใช้จำเป็นต้องทำงานในสภาพแวดล้อมราก, เปิดใช้งานอัตโนมัติตอนบู๊ตและเปิดใหม่หากปิดเครื่อง

ข้อเสนอแนะใด ๆ


ดูเหมือนว่าคุณต้องการพุ่งพรวด
glenn jackman

ไม่พุ่งพรวดแทนที่ด้วย systemd?
ไมเคิล

ไม่ว่าจะด้วยวิธีใดให้เลือกสคริปต์ที่คุณกำหนดเอง
เกล็นแจ็คแมน

คำตอบ:


0

ดังนั้นหลังจากได้รับคำแนะนำจากเกล็นแจ็คแมนฉันเริ่มใช้เวลาดูที่คนธรรมดา / systemd ฉันลงเอยดู systemd และหาแง่มุมต่าง ๆ ของสิ่งที่ฉันกำลังมองหา

หนึ่งในข้อกังวลก็คือจนถึงตอนนี้ฉันจำเป็นต้องเรียกใช้ซอฟต์แวร์ในสภาพแวดล้อมรากเนื่องจากซอฟต์แวร์ของผู้จำหน่ายบางรายที่ฉันใช้จำเป็นต้องใช้ ปรากฏว่าเมื่อคุณตั้งค่าบริการด้วย systemd ทุกอย่างจะทำงานด้วยสิทธิ์พิเศษของรูท เพื่อที่จะดูแลหนึ่งในปัญหาของฉัน

สำหรับการเปิดตัวเมื่อบูทขึ้นและจัดการการปิดซอฟต์แวร์ใด ๆ ซอฟต์แวร์จะถูกจัดการด้วยไฟล์หน่วยที่ง่ายมากซึ่งอยู่ที่ /lib/systemd/system/app.service

[Unit]
Description=this does something
WantedBy=multi-user.target

[Service]
exec executes my app
Restart
RestartSec

[Install]
wantedBy=multi-user.target

ต่อไปฉันเปิดใช้งานบริการใหม่ผ่านการใช้ systemctl

sudo systemctl enable app.service
sudo systemctl daemon.reload
sudo systemctl start app.service

สิ่งนี้เปิดใช้งานการเปิดตัวเมื่อบูทเครื่องและทดสอบทันที

ขอขอบคุณอีกครั้งสำหรับเกล็นที่ชี้ให้ฉันในทิศทางที่ถูกต้อง

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