บริการ Systemd - สคริปต์ Python ภายในหน้าจอเมื่อบู๊ตเครื่อง


4

ฉันกำลังเรียกใช้สคริปต์ python ภายในเซสชันของหน้าจอผ่านสคริปต์นี้ใน rc.local:

screen -L -dmS pi python /home/pi/truck/main2.py &

แต่ฉันต้องการให้มันทำงานผ่าน systemd ดังนั้นฉันสามารถรีสตาร์ทได้หากสคริปต์ Python ขัดข้อง

ฉันพยายามสร้างบริการใน /systemd/system/myscript.service

[Unit]
Description=myscript
After=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=3
ExecStart=/usr/bin/screen -L -dmS pi  python /home/pi/truck/main2.py

[Install]
WantedBy=multi-user.target

แต่มันจะไม่เรียกใช้สคริปต์ของฉันภายในเซสชันหน้าจอหรือไม่

หากฉันได้รับรายการหน้าจอที่ใช้งานอยู่แสดงว่าเซสชันหน้าจอ "pi" นั้นตาย


เห็นฉันใน unix.stackexchange.com ฉันยินดีที่จะช่วยคุณที่นั่น!
user2531336

มีเหตุผลบางอย่างที่จะใช้ Screen เลยหรือไม่?
grawity

ฉันใช้ Raspberry Pi ที่ไม่มีหัวและต้องการที่จะ SSH เป็นสคริปต์ของฉัน นั่นเป็นเหตุผลที่ฉันใช้หน้าจอ
TwinToe

คำตอบ:


8

Type=simpleคาดว่ากระบวนการหลักของบริการจะยังคงทำงานต่อไปตลอดไป อย่างไรก็ตามคำสั่งจริงของคุณกำลังบอกให้ Screen ทำสิ่งที่ตรงกันข้าม - เริ่มเซสชันใหม่และแยกเป็นพื้นหลัง

เมื่อหน้าจอทำเช่นนั้น systemd จะถือว่าบริการได้ออกและล้างกระบวนการที่เหลือทั้งหมดรวมถึงกระบวนการหน้าจอ "แบ็คกราวน์" (สิ่งนี้ไม่ได้นับว่าเป็น "ความล้มเหลว")

เพื่อหลีกเลี่ยงการที่ทั้งประเภทการเปลี่ยนแปลงไปforkingหรือหน้าจอตัวเลือกในการ-dm-Dm


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