systemd 서비스는 다음과 같이 정의됩니다.
[Unit]
Description=WebGPS
After=gpsd.service
[Service]
ExecStart=/usr/sbin/daemonize -p /run/gpsd/webgps.pid -o /var/log/webgps.log /usr/bin/python /var/www/gpsd/webgps.py c
TimeoutSec=1200
WorkingDirectory=/run/gpsd
Environment=PYTHONUNBUFFERED=1
RuntimeDirectory=gpsd
RuntimeDirectoryMode=0755
PermissionsStartOnly=true
Type=forking
PIDFile=/run/gpsd/webgps.pid
Restart=on-failure
GuessMainPID=true
#User=www-data
#Group=www-data
StateDirectory=gpsd
StateDirectoryMode=0755
PrivateTmp=true
ProtectSystem=full
ProtectHome=false
NoNewPrivileges=true
PrivateDevices=true
MemoryDenyWriteExecute=true
[Install]
WantedBy=default.target
그런 다음 실행하십시오 systemctl daemon-reload
. 여태까지는 그런대로 잘됐다. 다음: systemctl enable webgps
. 나쁘지 않아. 모든 것이 처음부터 systemctl start webgps
예상대로 작동했지만 다음과 같습니다.
WorkingDirectory=/run/gpsd
작업 디렉토리에는 다음만 포함됩니다.
# ll /run/gpsd
insgesamt 4,0K
drwxr-xr-x 2 0 0 60 Feb 27 16:13 ./
drwxr-xr-x 25 0 0 880 Feb 27 16:13 ../
-rw-r--r-- 1 0 0 5 Feb 27 16:13 webgps.pid
이 실행된 애플리케이션으로 생성된 파일을 검색하면 해당 파일을 찾을 수 있습니다 /
! 이것은 WorkingDirectory
당신이 가정할 수 없습니다:
# ll /
insgesamt 99K
drwxr-xr-x 21 0 0 4,0K Feb 27 16:13 ./
drwxr-xr-x 21 0 0 4,0K Feb 27 16:13 ../
drwxr-xr-x 2 0 0 4,0K Sep 8 06:49 bin/
drwxr-xr-x 3 0 0 2,5K Jan 1 1970 boot/
drwxr-xr-x 16 0 0 3,7K Feb 27 14:35 dev/
drwxr-xr-x 128 0 0 12K Feb 16 06:48 etc/
-rw-r--r-- 1 0 0 2,6K Feb 27 16:15 gpsd-c.html
-rw-r--r-- 1 0 0 5,3K Feb 27 16:15 gpsd-c.js
drwxr-xr-x 4 0 0 4,0K Apr 8 2019 home/
drwxr-xr-x 16 0 0 4,0K Apr 8 2019 lib/
drwx------ 2 0 0 16K Apr 8 2019 lost+found/
drwxr-xr-x 3 0 0 4,0K Apr 8 2019 media/
drwxr-xr-x 2 0 0 4,0K Apr 8 2019 mnt/
drwxr-xr-x 7 0 0 4,0K Apr 8 2019 opt/
dr-xr-xr-x 131 0 0 0 Jan 1 1970 proc/
drwx------ 7 0 0 4,0K Feb 27 16:11 root/
drwxr-xr-x 25 0 0 880 Feb 27 16:13 run/
drwxr-xr-x 2 0 0 4,0K Sep 11 00:07 sbin/
drwxr-xr-x 2 0 0 4,0K Apr 8 2019 srv/
dr-xr-xr-x 12 0 0 0 Feb 27 16:08 sys/
drwxrwxrwt 11 0 0 4,0K Feb 27 16:15 tmp/
drwxr-xr-x 11 0 0 4,0K Apr 8 2019 usr/
drwxr-xr-x 12 0 0 4,0K Aug 20 2019 var/
내가 찾을 수 있는 모든 상태는 동일합니다. 즉, WorkingDirectory
응용 프로그램이 실행 중인 디렉터리입니다. 무슨 일인지 아세요?
답변1
daemonize
"모든 것이 잘 작동합니다"는 실제로 서비스 관리자에서 불안정하고 위험한 PID 파일 메커니즘과 완전히 불필요한 프로그램을 사용하는 항목에 대한 설명이 아닙니다. 아이러니하게도 daemonize
이것이 문제의 원인입니다. 작업 디렉토리가 변경됩니다.
[Service]
ExecStart=/usr/bin/python /var/www/gpsd/webgps.py c
TimeoutSec=1200
WorkingDirectory=/run/gpsd
Environment=PYTHONUNBUFFERED=1
RuntimeDirectory=gpsd
RuntimeDirectoryMode=0755
PermissionsStartOnly=true
Type=simple
Restart=on-failure
#User=www-data
#Group=www-data
StateDirectory=gpsd
StateDirectoryMode=0755
PrivateTmp=true
ProtectSystem=full
ProtectHome=false
NoNewPrivileges=true
PrivateDevices=true
MemoryDenyWriteExecute=true
추가 읽기
- 조나단 데보인 폴라드(2015).실제로 데몬이 필요하지 않습니다. 진짜.. 체계화된 공포의 집.