ルートなしで継続的な統合のためにsystemdデーモンを再起動しますか?

ルートなしで継続的な統合のためにsystemdデーモンを再起動しますか?

私たちはsystemdによって開始され、開発サーバーの継続的な統合を通じて新しいバージョンを展開するように構成されたNodejsベースのサーバーを持っています。問題は、root以外のユーザーがsystemctlコマンドを使用してアプリケーションを再起動できないことです。

私たちが試したコマンド:

sudo systemctl start my-nodejs-server

システムスクリプトの内容:

[Unit]
Description=NodeJS Based Server

[Install]
WantedBy=multi-user.target

[Service]
User=myserver-user
Group=myserver-userh
Environment=ENV=production NODE_ENV=production
WorkingDirectory=/home/myserver-user/my-nodejs-server/
#ExecStart=/home/myserver-user/my-nodejs-server/scripts/appctl.sh restart
ExecStart=/usr/bin/node lib
Restart=on-failure

また、提案されているように、次のコマンドを試しました。

systemctl --user start my-nodejs-server

ただし、次のメッセージが表示されます。

Failed to connect to bus: No such file or directory

どんなアイデアがありますか?

私たちはUbuntu 16で動作しています。

ベストアンサー1

必要に応じて、「ユーザー単位ファイル」ではなく「システム単位ファイル」が必要です(参照ここ)、後者はユーザーのホームディレクトリにあり、ログインセッション中に実行されるプログラムにのみ適用されるためです。

私が採用したソリューションは、次の答えで説明されています。

root以外のユーザーがsystem.dサービスを制御できるようにするにはどうすればよいですか?

デフォルトでは、ユーザーに特定のコマンドを実行する sudo 権限を付与します。ここにいる:

myserver-user ALL= NOPASSWD: /bin/systemctl start my-nodejs-server
myserver-user ALL= NOPASSWD: /bin/systemctl stop my-nodejs-server
myserver-user ALL= NOPASSWD: /bin/systemctl restart my-nodejs-server

この権限をグループに適用するには、次のように識別子の前にパーセント記号を使用します。

%myserver-group ALL= NOPASSWD: /bin/systemctl start my-nodejs-server
%myserver-group ALL= NOPASSWD: /bin/systemctl stop my-nodejs-server
%myserver-group ALL= NOPASSWD: /bin/systemctl restart my-nodejs-server

また、参照された回答に基づいて、展開ユーザーがdeploymentアプリケーションを実行しているユーザーと同じでないように、展開ユーザーを同様のものに変更することもできます。

おすすめ記事