特定のユーザーの下でサービスを開始するbash(Ubuntu)でinitスクリプトを作成しようとしています。
これ以外にもっと良い方法はありますか?
su - <user> -c "bash -c 'cd $DIR ;<service name>'"
Ubuntuはstart-stop-daemon
は既にこの機能をサポートしています。
/etc/init.dのスケルトンファイルを使用します。
Sudo cp /etc/init.d/skeleton /etc/init.d/mynewservice
Mynewserviceを適切に編集します。
Start-stop-daemonを呼び出す行に次のパラメーターを追加します。
--chuid username:group
例:
変化する
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
に
start-stop-daemon --start --quiet --chuid someuser:somegroup --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
最後に、サービスを登録して開始します。
update-rc.d mynewservice defaults 99 && service mynewservice start
Start-stop-daemonの他のオプションの詳細 ここ
または、/etc/init.d/functions
ファイルで定義されているdaemon
関数を使用できます。
daemon --user=<user> $DIR/program
その構文を調べると、PIDファイルの場所の定義、Niceレベルの設定など、他のことを行うことができます。それ以外の場合は、デーモンとしてサービスを起動するのに非常に便利です。 daemon
で開始されたサービスは、別の関数関数killproc
で簡単に終了できます。
/etc/init.d/
下にyour_service_nameと言うスクリプトを最小限のコンテンツで作成できます。
#!/bin/sh
su - <user> -c "bash -c 'cd $DIR ;<service name>'"
スクリプトに適切な権限を与えます。次に、必要なupdate-rc.d
ディレクトリで/etc/rc<run_level>.d
コマンドを使用してスクリプトのソフトリンクを作成し、システムが上記の実行レベルで起動したときにスクリプトが実行されるようにします。
参照用に/etc/init.d/
のスクリプトを参照してください。スクリプトの記述の詳細については、/etc/init.d/README
を参照してください。 update-rc.d
のmanページもupdate-rc.d
の使用法を知るのに役立ちます。これは間違いなく私が使用しているUbuntuマシンで機能しますが、この機能はディストリビューション全体で利用できるようになると思います。
お役に立てれば!
同じ問題があり、私はそれを解決しました
Bashスクリプトを作成し、次のパターンを使用して/etc/init.d/に配置します#!/bin/bash
su <user> -c "bash -c '<path to service> $1'"
次のコマンドを使用して、スクリプトのセットアップ実行コードSudo update-rc.d <my_scrpit> defaults
このスクリプトが実行コードに設定されると、再起動時にrootがスクリプトを実行し、実行モードのステータスに応じて、スクリプトにstart/stopを$ 1として渡します。
再起動せずにスクリプトをテストする場合は、スクリプトをルートとして実行し、サービスアクションを渡します。開始/停止/再起動...root# ./etc/init.d/my_scrpit start