我正在尝试使用设置环境的现成的bash脚本。这是我要使用的服务:
[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
永远不会设置其中的变量,并且在没有变量的情况下启动服务器,这是错误的。我试图避免使用环境密钥或环境文件。
如果希望脚本文件中定义的变量可用于运行该脚本的父环境,则需要提供脚本源,而不是执行它。将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 '
请参见在bash中采购(“。”或“源”)与执行文件之间有什么区别?有关在源代码和执行脚本之间的区别的详细信息。
另请注意,我更改了重定向顺序。为了得到这两个标准错误和stdout到同一个文件,你需要> file 2>&1
不2>&1 > file
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句