私はすでに作成されたbashスクリプトを使用してenvを設定しようとしています。私が使用しようとしているサービスは次のとおりです。
[Unit]
Description=myserver service
After=multi-user.target
[Service]
Type=simple
User=ec2-user
Group=ec2-user
WorkingDirectory=/home/ec2-user/myserver/
ExecStart=/bin/sh -c '/home/ec2-user/myserver/config/myserverVars.sh ;/home/ec2-user/venv/bin/python /home/ec2-user/myserver/myserver.py 2>&1 >> /home/ec2-user/myserver/logs/systemd_myserver.log'
StandardOutput=append:/home/ec2-user/myserver/logs/systemd_stdout.log
StandardError=append:/home/ec2-user/myserver/logs/systemd_stderr.log
[Install]
WantedBy=multi-user.target
これmyserverVars.sh
:
#!/bin/bash
export [email protected]
export APP2_BIND_PASS=xxxxxx
export APP3=xxxxxx
の変数は/home/ec2-user/myserver/config/myserverVars.sh
設定されておらず、サーバーは変数なしで起動されます。これはエラーです。環境キーや環境ファイルを使用しないようにします。
答え1
スクリプトファイルで定義された変数をスクリプトを実行している親環境で使用できるようにするには、次のものが必要です。源泉スクリプトを実行する代わりに、行をExecStart
次に変更してください。
ExecStart=/bin/sh -c '. /home/ec2-user/myserver/config/myserverVars.sh ;/home/ec2-user/venv/bin/python /home/ec2-user/myserver/myserver.py >> /home/ec2-user/myserver/logs/systemd_myserver.log 2>&1 '
バラよりソース("."または"source")とbashでのファイル実行の違いは何ですか?スクリプトのインポートとスクリプトの実行の違いについての詳細。
また、リダイレクトの順序を変更しました。 stderrとstdoutを同じファイルにインポートするに> file 2>&1
は2>&1 > file
。
答え2
私にとってこれはうまくいきます:
ExecStart=/bin/bash -c 'MYVAR=xx exec /some/file'