เมื่อรับบริการ one-shot ต่อไปนี้เปิดใช้งานเมื่อบูต
[Unit]
Description = My Server Daemon
Documentation = https://etcetc.org
Wants = network-online.target getty.target NetworkManager-wait-online.service isc-dhcp-server.service xinetd.service smbd.service
After = network-online.target getty.target NetworkManager-wait-online.service isc-dhcp-server.service xinetd.service smbd.service
[Service]
Type = oneshot
RemainAfterExit = yes
User = foouser
PIDFile = /run/myd.pid
WorkingDirectory = /home/foouser/my-server/bin
ExecStart = /home/foouser/my-server/bin/myd
ExecStop = /home/foouser/my-server/bin/abort.sh
TimeoutStopSec = 5
[Install]
WantedBy = multi-user.target
มันล้มเหลวในการเริ่มต้นจริง ๆ กรอง /var/log/syslog
systemd [1]: myd.service: ล้มเหลวในขั้นตอน CHDIR วางไข่ / home / foouser / my-server / bin / my: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
ในขณะที่ journalctl --unit=myd.service
ตกลง
systemd [1]: myd.service: ออกจากกระบวนการหลักแล้วโค้ด = ออกแล้วสถานะ = 200 / CHDIR
ดังนั้นตั้งแต่ /home/foouser/my-server/bin/myd
เป็นลิงค์อ่อนของฉันไป /home/foouser/my-server/xspyctra/xspyctrad.py
, ผม
- การเปลี่ยนแปลง
ExecStart = /home/foouser/my-server/xspyctra/xspyctrad.py
- แสดงความคิดเห็น WorkingDirectory ที่ฉันไม่สนใจจริง ๆ เพราะสคริปต์หลามจะทำ
os.chdir('/home/foouser/my-server/bin')
ด้วยตัวเอง
บริการโหลดใหม่รีบูตระบบ ฯลฯ แต่ตอนนี้ฉันตกตะลึงจากข้อผิดพลาด
systemd [1653]: myd.service: ล้มเหลวในขั้นตอน EXEC วางไข่ /home/foouser/my-server/xspyctra/xspyctrad.py: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
systemd [1]: myd.service: ออกจากกระบวนการหลักแล้วโค้ด = ออกจากสถานะ = 203 / EXEC
ฉันสามารถให้สิทธิ์เพื่อให้แน่ใจว่าไฟล์นั้นมีอยู่
$ ls -l /home/foouser/my-server/xspyctra/xspyctrad.py
-rwxrw-r-- 1 foouser foouser 5532 May 10 16:13 /home/foouser/my-server/xspyctra/xspyctrad.py
เป็นการวินิจฉัยครั้งสุดท้าย service myd status
● myd.service - My Server Daemon
Loaded: loaded (/etc/systemd/system/myd.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2018-05-11 10:58:21 CEST; 16min ago
Docs: https://etcetc.org
Main PID: 1627 (code=exited, status=203/EXEC)
แก้ไข 1
อย่างไรก็ตามสิ่งนี้อาจเกิดขึ้นในช่วงเวลาบูต ที่จริงแล้ว,
sudo service myd stop
sudo service myd start
ดูเหมือนว่าจะทำงานเพราะ service myd status
● myd.service - My Server Daemon
Loaded: loaded (/etc/systemd/system/myd.service; enabled; vendor preset: enabled)
Active: activating (start) since Fri 2018-05-11 11:22:52 CEST; 1min 16s ago
Docs: https://etcetc.org
Main PID: 2106 (python2)
Tasks: 24
Memory: 545.1M
CPU: 10.913s
CGroup: /system.slice/myd.service
├─2106 python2 /home/foouser/my-server/bin/myd
├─2122 ./<my-child-process-a>
├─2127 ./<my-child-process-b>
└─2133 ./<my-child-process-c>
อย่างที่คาดไว้.
นอกจากนี้ให้สังเกตว่า xspyctrad.py
สคริปต์ที่แท้จริงจะวางไข่ twisted.reactor
ดังนั้นจะไม่กลับมาและอยู่ในเบื้องหน้า
ดังนั้นความผิดพลาดของฉันอยู่ที่ไหน
/home/foouser/
ถูกเข้ารหัส ดังนั้นจึงควรติดตั้งทุกอย่างภายใน /usr/bin/
...
/home/
ติดตั้งเมื่อเครื่องทำงานเมื่อเริ่มต้นหรือไม่ เป็นของคุณ/home/foouser/
เข้ารหัสอาจจะ? นอกจากนี้ยังมีProtectHome=
ตัวเลือก แต่ฉัน เดา ถ้ามันเป็นปัญหาแล้วตัวอย่างสุดท้ายจะล้มเหลว