쉘 스크립트를 사용하여 가상 머신을 설정하고 싶습니다. script.sh 예에는
pip install wheel
pip install cookiecutter
pip install flask
pip install gunicorn
pip install uwsgi
그런 다음 /etc/systemd/system/website.service 위치에 다음 내용으로 서비스 파일을 생성하고 싶습니다.
[Unit]
Description=Gunicorn instance to serve website
After=network.target
[Service]
User=$1
Group=www-data
WorkingDirectory=/home/$1/website
Environment="PATH=/home/$1/website/venv/bin"
ExecStart=/home/$1/website/venv/bin/gunicorn --workers 3 --bind unix:website.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target
여기서 $1은 쉘 스크립트를 실행하는 사용자($USER)로 대체됩니다. 가장 좋은 해결책은 별도의 파일에 넣은 다음 매개변수를 교체할 때 지정된 위치에 파일을 복사하는 것입니다. 중요한 것은 위치로 인해 붙여넣기 위해 sudo가 필요하다는 것입니다.
그것은 다음과 같습니다:
pip install wheel
pip install cookiecutter
pip install flask
pip install gunicorn
pip install uwsgi
sudo echo file_containing_text.txt $USER > /etc/systemd/system/website.service
하지만 나를 사랑하기 때문에 나는 그것을 성공시킬 수 없었습니다.
답변1
이 작업을 수행하는 더 좋은 방법이 있을 수 있지만 수행하려는 작업을 구체적으로 지정하려면 "여기 문서"를 사용할 수 있습니다.
#!/bin/bash
pip install wheel
pip install cookiecutter
pip install flask
pip install gunicorn
pip install uwsgi
sudo cat > /etc/systemd/system/website.service << EOF
[Unit]
Description=Gunicorn instance to serve website
After=network.target
[Service]
User=${USER}
Group=www-data
WorkingDirectory=/home/${USER}/website
Environment="PATH=/home/${USER}/website/venv/bin"
ExecStart=/home/${USER}/website/venv/bin/gunicorn --workers 3 --bind unix:website.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target
EOF
<< TOKEN
와 라인 사이의 모든 것은 TOKEN
문서입니다. 제 예에서는 이를 EOF
토큰으로 사용하고 있습니다.
답변2
예, 문제는 (당신처럼 실행되는) 쉘이 리디렉션을 처리하려고 한다는 것입니다앞으로sudo 명령을 시작합니다.
tee
여기서는 훌륭하게 작동합니다.
sed 's/\$1/'"$USER"'/' your_file | sudo tee /some/privileged/file
화면에 출력되는 것을 보고 싶지 않다면 >/dev/null
마지막에 추가하세요.
또는 sudo를 사용하여 쉘을 생성할 수 있습니다.
export USER
sudo sh -c 'sed "s/\\\$1/$USER/" your_file > /some/privileged/file'
그러나 우리는 여기서 분명히 지옥을 언급하고 있습니다.