질문: systemd를 사용하여 프로세스를 시작하고 선택한 작업 디렉터리에 프로세스를 할당할 수 있나요?
시작하고 싶은 서비스가 있습니다 systemd
. 서비스가 시작되면 현재 작업 디렉터리를 할당할 수 있기를 원합니다. 을 사용하고 있었다면 어떻게 해야 하는지 알지만 init
문제가 발생합니다 systemd
.
그것이 제가 달성하려고 노력해 온 것입니다.
내 서비스
Python으로 작성된 간단한 유틸리티("listdir")를 만들어 다음 위치에 배치했습니다 /opt/bin/listdir
.
#! /usr/bin/python
import os
print 'Current working directory: %s' % (os.getcwd())
내 프로필
listdir.service
그런 다음 파일 을 만들어 systemd
여기에 배치했습니다 /lib/systemd/system/listdir.service
. ::
[Unit]
Description=Test of listing CWD.
[Service]
ExecStartPre=chdir /usr/local
ExecStart=/opt/bin/listdir
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
질문
syslog를 실행하면 systemctl start listdir
루트 디렉터리("/")가 현재 작업 디렉터리로 기록됩니다. 물론 프로세스를 시작하기 전에 디렉토리가 변경될 것이라고 /usr/local
가정하므로 현재 디렉토리로 예상합니다.ExecStartPre
분명히 나는 그것이 systemd
쉘 스크립트처럼 작동할 것이라고 상상했습니다(비록 그것이 쉘 스크립트가 아니라는 것을 알고 있음에도 불구하고). 누군가 내가 무엇을 해야 하는지 말해 줄 수 있나요? 를 사용하여 작업 디렉토리를 설정할 수 있습니까 systemd
? 감사해요!
편집하다:내 시스템 로그에 오류가 보고됩니다. (방금 눈치챘습니다.)
Executable path is not absolute, ignoring: chdir /usr/local
따라서 chdir
실행 파일 자체가 아닌 쉘 명령입니다. 좋아요 하지만 디렉토리를 변경하는 데 사용할 수 있는 다른 방법이 있습니까 systemd
?
답변1
systemd >= 227에서는 다음을 사용할 수 있습니다.
[Service]
WorkingDirectory=/usr/local
거기에서 스크립트를 실행해 보세요.
(문서관리 시스템)