디렉터리(cd)를 변경할 수 없거나 작업 디렉터리 Systemd Exec 명령을 사용할 수 없습니다.

디렉터리(cd)를 변경할 수 없거나 작업 디렉터리 Systemd Exec 명령을 사용할 수 없습니다.

시작 스크립트를 얻으려고 합니다(시스템 서비스)을 위한 docker-compose containers.

나는 그것이 작동하도록 노력하고 있으며 변경 후 변경을 시도하고 있습니다. 어떤 것들은 작동하고 다른 것들은 예상대로 작동하지 않습니다.환경 변수시스템 구성을 사용하십시오.

# named `dc-mag235.service`
[Unit]
Description=Magento 2.3.5 Docker-Compose Containers
After=docker.service
Requires=docker.service

[Service]
EnvironmentFile=/var/www/docker/_systemd.startups_/mag2.35.env.file
#PassEnvironment=$DCFOLDER
Type=simple
TimeoutStartSec=0
Restart=always
WorkingDirectory=${DCFOLDER}
ExecStartPre=mkdir -p ${LOGFOLDER}
ExecStartPre=echo ${DCFOLDER}
ExecStartPre=echo Starting Docker-compose service for ${DESCRIPTION}...
ExecStart=/usr/local/bin/docker-compose start
ExecReload=/usr/local/bin/docker-compose restart
ExecStop=/usr/local/bin/docker-compose stop

[Install]
WantedBy=multi-user.target
DESCRIPTION=Magento 2.3.5 Docker-Compose Containers
LOGFOLDER=/var/www/docker/_initlogs_
LOGFILE=$LOGFOLDER/dc-mag235.startup.log
DCFOLDER=/var/www/docker/magento2-docker-full-supervisord-expanded/release-magento2.35

WorkingDirectory변수와 함께 사용해 보세요 $DCFOLDER. 삭제하면 PassEnvironment여기에 언급된 것과 동일한 오류가 발생합니다.:

sudo service dc-mag235 status
/etc/systemd/system/dc-glo-mag235.service:8: Invalid environment name for PassEnvironment, ignoring: $DCFOLDER
Apr 22 12:32:20 glo020-truservcomm-jhb1-001 systemd[1]: /etc/systemd/system/dc-glo-mag235.service:12: WorkingDirectory= path is not absolute: ${DCFOLDER}

대신 cd $DCFOLDER && docker-compose restartas 명령을 사용해 보세요 .ExecStartWorkingDirectory

Executable "cd" not found in path "/usr/local/sbin:/usr/local/bin:/usr/sbin:

참고: 비활성화 WorkingDirectory한 다음 를 사용하면 cdecho를 확인할 때 /var/log/syslogecho는 ExecStartPre실제로 이러한 변수(경로)의 값을 원래대로 제공합니다. 너무 ExecStartPre잘 실행되었습니다.

질문

  • docker-compose.yml.*실행 중인 사용자 정의 파일이 있습니다.기존의컨테이너를 다시 시작/중지/시작해야 합니다. docker-compose제가 사용하고 싶은 서비스 명령어가 물어보시 니까docker-compose.yml해당 디렉토리에cd, or WorkingDirectory을 직접 사용할 수 있도록 해야 합니다 docker-compose start.

  • 다양한 docker-compose 컨테이너 세트(다른 폴더)의 실행 중인 인스턴스가 여러 개 있으므로 위치를 지정할 수 있는 "템플릿 시스템" 파일을 만들고 싶습니다 EnvironmentFile.

다시 말해서:

Example = each of these have their own Docker containers... so I want to create different systemd services for these:

/docker/folder/docker-compose.yml
/docker/folder2/docker-compose.yml

질문

여기에 몇 가지 질문이 있습니다.

  1. WorkingDirectory"환경 변수"와 함께 사용할 수 있나요 ? 그리고 어떻게 사용할 수 있나요?보시다시피 저는 PassEnvironment를 사용해 보았습니다.그러나 환경 파일이 있습니다. 제가 잘 이해하지 못하는 것 같습니다구현하다systemd환경을 설정할 시간입니다 WorkingDirectory. 이러한 모든 "서비스" 명령에는 정적 상수 값이 필요한 것 같습니다.

  2. 'cd' not found in path- 이건 이상해요. 그냥 간단하게 할 수 있을 거라 생각했거든요.디렉토리 변경docker-compose.yml를 실행할 수 있도록 파일이 있는 작업 디렉토리로 이동합니다 docker-compose start/restart/stop.

  3. 실제적인 용도는 무엇입니까 PassEnvironment?

  4. $(which docker-compose) ps마지막으로, 예를 들어 시도는 WorkingDirectory"일정한 값"을 기대하는 것 같았기 때문에 실패했습니다. $(which docker-compose)대신 정적 위치를 사용하고 싶었습니다 .

답변1

때로는 이렇게 간단할 수도 있습니다

ExecStart=/bin/bash -c "cd \"/path/${variable_subpath}/\";echo \"${PWD}\";"

그리고 WorkingDirectory완전히 건너뛰세요. 대부분의 경우 간단한 명령이나 스크립트인 경우에만 이 해킹을 피할 수 있습니다.

관련 정보