私たちは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
必要に応じて、「ユーザー単位ファイル」ではなく「システム単位ファイル」が必要です(参照ここ)、後者はユーザーのホームディレクトリにあり、ログインセッション中に実行されるプログラムにのみ適用されるためです。
私が採用したソリューションは、次の答えで説明されています。
デフォルトでは、ユーザーに特定のコマンドを実行する 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
アプリケーションを実行しているユーザーと同じでないように、展開ユーザーを同様のものに変更することもできます。