シェルスクリプトを使用して仮想マシンを設定したいと思います。 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'
しかし、私たちはここで明らかに地獄に言及しています。