systemd 서비스를 시작하기 전에 chdir을 실행하십시오.

systemd 서비스를 시작하기 전에 chdir을 실행하십시오.

질문: 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

거기에서 스크립트를 실행해 보세요.

(문서관리 시스템)

관련 정보