无法更改目录 (cd) 或使用工作目录 Systemd Exec 命令

无法更改目录 (cd) 或使用工作目录 Systemd Exec 命令

我正在尝试获取启动脚本(系统服务)为了docker-compose containers

我正在努力让它发挥作用,并做出了一次又一次的改变;有些事情有效,而其他事情没有按预期工作,具体来说是如何环境变量使用 systemd 配置。

# 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 restartasExecStart命令而不是WorkingDirectory

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

请注意: 当我禁用WorkingDirectory然后使用 时cd,在检查回声时,/var/log/syslog回声ExecStartPre实际上给了我这些变量(路径)的值,因为它们应该是。所以ExecStartPre执行得很好。

问题

  • 我有定制docker-compose.yml.*正在运行的自定义文件现存的容器,需要重新启动/停止/启动。自从docker-compose我要使用的服务命令要求您在目录里面docker-compose.yml在所在,我需要能够使用cdorWorkingDirectory以便我可以直接使用docker-compose start

  • 我有几个正在运行的不同 docker-compose 容器集(不同文件夹)的实例,所以我想创建一个“模板 systemd”文件,我可以只指定位置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完全跳过。在大多数情况下,如果它是简单的命令或脚本,您只能摆脱这种黑客方法。

相关内容