- ベストアンサー
自動起動シェルで「su - user -c "command"」が実行できない
初めて質問いたします。 よろしくお願いします。 OS:solaris8 OSの起動・停止時に自動起動させたいコマンドがあったので、 以下のシェル(testsh)を作成し、/etc/init.dに置き、 /etc/rc0.dにtestshに対しK99testshの名称でシンボリックリンクを作成、 /etc/rc3.dにtestshに対しS99testshの名称でシンボリックリンクを作成しました。 OS起動時には、iii.txtが削除され、 OS停止時には、jjj.txtが削除されると思うのですが、 削除されていませんでした。 OSの起動・停止時ではなく、sh -x testshで起動した場合は、 正常に動作しました。 又、suでユーザーを変更しないスクリプトに変えた場合は、OSの起動・停止時にiii.txt、及びjjj.txtが削除されていたので、 起動・停止時のsuが正常に動作していないように思います。 どなたが原因などお分かりでしょうか? 又は、手順で何か間違いなどありますでしょうか? ご教授よろしくお願いします。 以下シェル(testsh)の内容 #!/bin/sh case "$1" in start) su - user -c "rm /export/home/user/test/iii.txt" ;; stop) su - user -c "rm /export/home/user/test/jjj.txt" ;; *) echo "Usage: $0 {start|stop}" exit 1 ;; esac exit 0
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Solaris8の環境設定の問題の可能性が高そうですね。 現在、「su - user」で実行していますが、これだとユーザ別の環境初期化が動きますよね。 .loginや、.profile等の中で、OpenWindowを前提としたモジュール等が起動されているのではないでしょうか。 GUIログインで動いている環境(RunLevel5)ならば、その可能性は高いかと思います。 ためしに、「su user」でやってみたらどうですかね。 これが次の切り分けだと思います。
その他の回答 (3)
- mko2
- ベストアンサー率75% (3/4)
アドバイスレベルですが、もう1つ。 "S99testsh" と書かれていますが、"S99test.sh"ではないですよね。 ("."のある、なし) S99testsh の場合、 /sbin/sh /etc/rc3.d/S99test.sh start で実行されますが、 S99test.sh の場合、 . /etc/rc3.d/S99test.sh と実行され、"start" が付加されません。 どのように動作するかは、view /etc/rc3 で見てください。
お礼
「.」のあるなしで動作が変わるのですね…。 参考になります。 S99testshで、「.」はありません。 start付きで実行されているようです。 アドバイスありがとうございました。
- mko2
- ベストアンサー率75% (3/4)
you-mさんの/tmp/errorlog が作成されていなかったら・・・。 >/etc/rc0.dにtestshに対しK99testshの名称でシンボリックリンクを作成、 >/etc/rc3.dにtestshに対しS99testshの名称でシンボリックリンクを作成しました。 ”作成”が気になります。 sh /etc/rc3.d/S99testsh start で手動実行できますか?
お礼
アドバイスありがとうございます。 sh /etc/rc3.d/S99testsh start で実行できました。 やはりOS起動・停止時に問題があるように思います。
- you-m
- ベストアンサー率58% (190/327)
問題の切り分け方としては、なかなか素晴らしいですね。 トラブルシューティングのセンスがありそうです。 そこまで、切り分けが出来ているのであれば、もう一つ調査しましょう。 su - user -c "rm /export/home/user/test/iii.txt" > /tmp/errorlog 2>&1 のようにして、何か予想外のエラーが出ていないか確認しましょう。 ひょっとすると、suが’command not found’とかになっている可能性もありますよね。 それで何も出ていないなら、中身のrmコマンドのリダイレクトです。 ご参考までに。
お礼
「> /tmp/errorlog 2>&1」で 結果を出力できるのですね。 unix初心者ですので知りませんでした・・・。 大変参考になります。 ありがとうございます。 本日は帰宅してしまったため、 また明日にでも試してみます。
補足
su - user -c "rm /export/home/user/test/iii.txt" > /tmp/errorlog 2>&1 でログを取りました。 以下がその内容です。 Sun Microsystems Inc. SunOS 5.8 Generic Patch February 2004 Starting OpenWindows in 5 seconds (type Control-C to interrupt) /dev/fb: No such file or directory /dev/fb: No such file or directory Graphics Adapter device /dev/fb is of unknown type Fatal server error: InitOutput: Error loading module for /dev/fb /usr/openwin/bin/xinit: Server error. ^L ログを見るとなにやら”OpenWindows ”するときに、「/dev/fb」が無いので、ロードできない、 というようなエラーと読めます。 どのようにすれば解決できますでしょうか? 詳しくないので良く分からないのですが、 OpenWindowsとはGUIのことでしょうか? ちなみに当方のサーバー(Sun Fire v100)は ディスプレイをつなげられないタイプですので、 GUIは特に必要無いかと思います。 unix系初心者で不明点ばかりですが、 ご教授よろしくお願いします。
お礼
「su user」とすることで解決いたしました。 仰る通り、.profile中にOpenWindowのモジュールを実行しているようでした。 ありがとうございました。