ปกติจะไม่โพสต์ที่นี่ แต่ฉันกำลังฉีกผมออกไปมากกว่านี้ ฉันมีสคริปต์ Python ที่เรียกใช้เมื่อมันเปิดตัวและมีหน้าที่รับผิดชอบในการเริ่มต้นกระบวนการอื่น ๆ สคริปต์นี้เคยเปิดตัวเมื่อเริ่มต้นผ่าน sysvinit แต่เมื่อเร็ว ๆ นี้ฉันอัพเกรดเป็น Debian Jessie ดังนั้นจึงได้ปรับให้เปิดใช้งานผ่าน systemd
น่าเสียดายที่ฉันพบปัญหาฉันไม่สามารถทำงานได้ เมื่อคุณเรียกใช้สคริปต์โดยตรงในเชลล์ผู้ใช้มันจะเปิดใช้งานกระบวนการลูกอย่างถูกต้องและเมื่อสคริปต์ออกจากกระบวนการลูกจะถูกกำพร้าและทำงานต่อไป
เมื่อเปิดตัว Via systemd หากกระบวนการหลักออกไปเด็ก ๆ ก็ออกจากกันด้วย (หน้าจอก็จะเริ่มตายและปรากฏเป็น Dead ???)
เป็นการดีที่ฉันจะต้องสามารถเริ่มต้นสคริปต์แม่โดยไม่ต้องฆ่ากระบวนการลูกทั้งหมดมีบางสิ่งที่ฉันหายไป?
ขอบคุณ!
[Unit]
Description=Server commander
After=network.target
[Service]
User=serveruser
Type=forking
PIDFile=/var/Server/Server.pid
ExecStart=/var/Server/Server.py
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
แก้ไข: มันอาจเกี่ยวข้องกับฉันที่จะชี้ให้เห็นว่าสคริปต์ Python นั้นเป็น 'ตัวควบคุม' สำหรับกระบวนการลูก มันเริ่มและหยุดเซิร์ฟเวอร์ในหน้าจอ gnu ตามที่ร้องขอจากเซิร์ฟเวอร์กลาง โดยปกติแล้วจะทำงานอยู่ตลอดเวลาไม่ส่งผลให้เกิดบริการและออก อย่างไรก็ตามมีบางกรณีที่ฉันต้องการโหลดสคริปต์ซ้ำโดยไม่ฆ่ากระบวนการลูกแม้ว่านั่นหมายความว่ากระบวนการนั้นถูกปิดใช้งานไปยัง pid 1 จริงๆแล้วมันไม่สำคัญว่าสคริปต์ Python จะเริ่มต้นกระบวนการเป็น กระบวนการหลักถ้าเป็นไปได้
คำอธิบายที่ดีขึ้นเกี่ยวกับวิธีการทำงาน:
- Systemd วางไข่ /Server.py
- Server.py หาและเขียนไฟล์ pid สำหรับ Systemd
- Server.py จะวางกระบวนการของเซิร์ฟเวอร์ในหน้าจอ gnu ตามคำแนะนำ
- Server.py จะทำงานต่อไปเพื่อทำการรีสตาร์ทที่ร้องขอจากเซิร์ฟเวอร์
เมื่อเรียกใช้โดยไม่ใช้ Systemd คุณสามารถเริ่มต้น Server.py ได้ใหม่และหน้าจอ gnu ที่เปิดใช้จะไม่ได้รับผลกระทบใด ๆ เมื่อเรียกใช้งานด้วย Systemd เมื่อ Server.py ปิดตัวลงแทนที่จะเป็นกระบวนการหน้าจอที่ถูกปิดใช้งานเป็น pid 1 จะถูกฆ่า
simple
หรือforking
จริง) สุดท้ายจะเป็นType=oneshot
, และRemainAfterExit=yes
KillMode=control-group
Server.py
รหัสและคำอธิบายของ fork การบริการที่เรียกใช้ (ถ้ามีการแยก) แต่โดยทั่วไปพูดนี้เป็นความพร้อมโปรโตคอลไม่ตรงกันปัญหา