とにかく私はLinuxに初めて触れたので、これほど広範囲ではありませんが、過去にLinuxを使用していました。
ここで達成したいのは、コンピュータが起動するとすぐにopenvpnサービスを起動することです。私はこれを部分的に達成しました。異なる国に接続するように構成された複数の.ovpnファイルがあります。まず、どの国に接続したいのかを尋ねるスクリプトを作成し、接続しました。
今私が望むのは、ユーザーが起動するたびにサービスが入力を要求して実行するように自動的に作成することです。ここでの問題は、サービスが入力するように求めるメッセージを強制できないことです。
クンコード:
#!/bin/bash
echo Which server do you want to connect
read -p 'Server(pt, se, nl, es, no, is, ch, de, ca, au, at): ' server
echo "You selected " $server
sudo openvpn /opt/ProtonVPN/$server.protonvpn.com.udp.ovpn
このコードはそれ自体でうまく機能します。
サービスを作成するには、次のドキュメントに従いました。デーモンのように起動および停止できるように、シェルスクリプトのサービスをどのように生成できますか?
私のサービスファイルは次のとおりです。
[Unit]
Description=Connect to ProtonVPN
[Service]
Type=simple
ExecStart=/home/{user}/bin/proton-run.sh
その後、次のコマンドを使用してデーモンを再起動しました。systemctl daemon-reload
次のようにサービスを実行しようとしましたが、sudo systemctl start proton-run.service
入力プロンプトが表示されなかったため、スクリプトがクラッシュしてスクリーンショットが添付されました。
助けが必要ですか?私はsystemd-ask-passwordについて読んだが、それが私に必要なものだとは思わない。
ベストアンサー1
あなたがしたいことは不可能です。
「sudo systemctl start proton-run.service」と入力すると、別のプロセスを使用してスクリプトが独自のシェルで実行されます。このプロンプトはシェルには表示されません。
考えられる解決策は、systemctlに引数を提供し、それを基本スクリプトに渡すことです。
これを行う方法のいくつかのアイデアは次のとおりです。https://superuser.com/questions/728951/systemd-giving-my-service-multiple-arguments