systemd 서비스를 시작하기 전에 chdir 실행


148

질문 : systemd로 프로세스를 시작하고 해당 프로세스에 선택한 작업 디렉토리를 할당 할 수 있습니까?

시작하려는 서비스가 systemd있습니다. 해당 서비스가 시작될 때 현재 작업 디렉토리를 지정할 수 있기를 원합니다. 사용중인 경우이 작업을 수행하는 방법을 알고 init있지만에 문제가 systemd있습니다.

여기 내가 일하려고 노력한 것이 있습니다.

내 서비스

파이썬으로 작성된 간단한 유틸리티 ( "은 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

문제

systemctl start listdir시스템 로그를 실행 하면 루트 디렉토리 ( "/")가 현재 작업 디렉토리로 기록됩니다. 물론 프로세스를 시작하기 전에 디렉토리를 변경 /usr/local한다고 생각했기 때문에 현재 디렉토리로 예상 되었습니다 ExecStartPre.

분명히, 나는 systemd그것이 쉘 스크립트가 아니라는 것을 알고 있지만 쉘 스크립트와 같은 것을 작동시킬 것이라고 상상하고 있습니다. 누군가 내가해야 할 일에 대한 아이디어를 줄 수 있습니까? ?를 사용하여 작업 디렉토리를 설정할 수도 systemd있습니까? 감사!


편집 : 시스템 로그에 오류가보고되었습니다. (방금 알았습니다.)

Executable path is not absolute, ignoring: chdir /usr/local 

그래서, chdir쉘 명령, 그리고 실행 자체입니다. 괜찮아. 그러나 여전히 디렉토리를 변경하는 방법이 systemd있습니까?

답변:


270

systemd> = 227에서는 다음을 사용할 수 있어야합니다.

[Service]
WorkingDirectory=/usr/local

스크립트를 실행할 수 있습니다.

( DOCS )


4
이것을 어떻게 찾았습니까? 문서의 어느 곳에서도 언급되지 않았습니다 !
jameshfisher 2016 년


3
@EricRenouf 아하, 그들은 단지 서비스 설명서에서 해당 공유 옵션을 복제한다
jameshfisher

3
명확성을 위해이 [Service]섹션으로 넘어가겠습니까?
dthor

4
나 자신에게 대답하면 버전에도 불구하고 최신 CentOS 7에서 작동했습니다.
BrunoJCM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.