ディレクトリ(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、orWorkingDirectoryを直接使用できるようにする必要があります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完全にスキップしてください。ほとんどの場合、単純なコマンドまたはスクリプトでのみこのハッキングを回避できます。

関連情報