パラメータを使用して su -s を実行する

パラメータを使用して su -s を実行する

コマンドを使用してコマンドを実行してsu -sプロセスを開始します。これは、root ユーザーがプロセスを所有したくないためです。

私はコマンドを実行してこれを試しました

su -s "$CATALINA_HOME/bin/catalina.sh run" tomcat

返品su: /opt/apache-tomcat/bin/catalina.sh run: No such file or directory

su -sこのエラーを生成せずにパラメータを含むコマンドを実行するにはどうすればよいですか?

答え1

走っているならsuasをroot使用して-s別のシェルを指定し(ここではユーザーに有効なシェルがないため、root必要に応じて実行)、実行するコマンドを指定できます。tomcat-c

su -s /bin/sh -c "$CATALINA_HOME/bin/catalina.sh run" tomcat

あなたは見つけることができますstart-stop-daemon便利です。使用するユーザーとグループ、デーモンの起動方法などを指定するための多くのオプションがあります。tomcat8初期化スクリプトDebian で使用すると便利なインスピレーションを得ることができます。あるいは、systemdユニットやシステムの初期化に適したものを作成することを検討してください。

答え2

-sコマンドのスイッチは、su指定されたユーザーのシェルを変更することです。実行するコマンドの前には-cスイッチが必要です。

したがって、探しているコマンドは次のようになります。

su -s /bin/bash -c "$CATALINA_HOME/bin/catalina.sh run" tomcat

答え3

他に質問がある場合は、ご覧ください。https://stackoverflow.com/questions/37753783/そしてシグナル9によってシェルスクリプトが終了したかどうかを知る方法はありますか?あなたの質問に欠けているのは、起動時にTomcatを実行しようとしていることです。

この場合:

  • start-stop-daemon適していません。
  • どちらもありませんsu
  • Poor Man's Daemon SupervisorはシェルスクリプトでPIDファイルの管理も行いません。

これらのすべては、新興企業がすることを模倣しようとします。まっすぐsu特に権限を削除するツールではないので、使用するのは悪いです。それはツールです次へ追加ログインセッションの権限。今日では、さまざまなログインセッション管理サブシステムの背後に参加しているため、デーモンからスーパーユーザー権限を削除する(はるかに簡単な)作業には特に適していません。 start-stop-daemonただ重複しています。そしてUpstartはプロセスIDを知っています。その子たち。

開始作業ファイルのセクションsetuidおよび(該当する場合)setgidセクションを使用して、権限のないユーザーの権限を削除します。

setuid 浮気

catalina.sh(実際には必要ありません)を介して電話する場合は、sh -cシステム化されたHouse of Horrorエリアに属しないでください。 (upstartがこれらのタスクを実行すると、状況は少し深刻です。)daemontools方法でタスクを実行し、シェルをスクリプトに接続してシェルのコマンドを介して呼び出して、execupstartがデーモンを直接子として扱うようにします。 (そして新興企業expectもこの事実を知って正しいスタンザを使うようにしてください。)

catalina.shただし、upstartはsystemdや他のサービス管理ツールと同様に自分自身を呼び出すことができるため、明示的なシェルは必要ありません。したがって、インタプリタが/bin/bash実際にスクリプトの正しいインタプリタであることを確認することを心配する必要はありません。

$CATALINA_HOME/bin/catalina.shを実行して実行します。

追加読書

関連情報