• ベストアンサー

自動起動シェルで「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

質問者が選んだベストアンサー

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.4

Solaris8の環境設定の問題の可能性が高そうですね。 現在、「su - user」で実行していますが、これだとユーザ別の環境初期化が動きますよね。 .loginや、.profile等の中で、OpenWindowを前提としたモジュール等が起動されているのではないでしょうか。 GUIログインで動いている環境(RunLevel5)ならば、その可能性は高いかと思います。 ためしに、「su user」でやってみたらどうですかね。 これが次の切り分けだと思います。

stay_gold
質問者

お礼

「su user」とすることで解決いたしました。 仰る通り、.profile中にOpenWindowのモジュールを実行しているようでした。 ありがとうございました。

その他の回答 (3)

  • mko2
  • ベストアンサー率75% (3/4)
回答No.3

アドバイスレベルですが、もう1つ。 "S99testsh" と書かれていますが、"S99test.sh"ではないですよね。 ("."のある、なし) S99testsh の場合、 /sbin/sh /etc/rc3.d/S99test.sh start で実行されますが、 S99test.sh の場合、 . /etc/rc3.d/S99test.sh と実行され、"start" が付加されません。 どのように動作するかは、view /etc/rc3 で見てください。

stay_gold
質問者

お礼

「.」のあるなしで動作が変わるのですね…。 参考になります。 S99testshで、「.」はありません。 start付きで実行されているようです。 アドバイスありがとうございました。

  • mko2
  • ベストアンサー率75% (3/4)
回答No.2

you-mさんの/tmp/errorlog が作成されていなかったら・・・。 >/etc/rc0.dにtestshに対しK99testshの名称でシンボリックリンクを作成、 >/etc/rc3.dにtestshに対しS99testshの名称でシンボリックリンクを作成しました。 ”作成”が気になります。 sh /etc/rc3.d/S99testsh start で手動実行できますか?

stay_gold
質問者

お礼

アドバイスありがとうございます。 sh /etc/rc3.d/S99testsh start で実行できました。 やはりOS起動・停止時に問題があるように思います。

  • you-m
  • ベストアンサー率58% (190/327)
回答No.1

問題の切り分け方としては、なかなか素晴らしいですね。 トラブルシューティングのセンスがありそうです。 そこまで、切り分けが出来ているのであれば、もう一つ調査しましょう。 su - user -c "rm /export/home/user/test/iii.txt" > /tmp/errorlog 2>&1 のようにして、何か予想外のエラーが出ていないか確認しましょう。 ひょっとすると、suが’command not found’とかになっている可能性もありますよね。 それで何も出ていないなら、中身のrmコマンドのリダイレクトです。 ご参考までに。

stay_gold
質問者

お礼

「> /tmp/errorlog 2>&1」で 結果を出力できるのですね。 unix初心者ですので知りませんでした・・・。 大変参考になります。 ありがとうございます。 本日は帰宅してしまったため、 また明日にでも試してみます。

stay_gold
質問者

補足

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系初心者で不明点ばかりですが、 ご教授よろしくお願いします。

関連するQ&A

  • サーバ起動時にある特定のユーザ権限でシェルを動かす

    Ubuntuを使っています。 サーバ起動時にある特定ユーザ権限でシェルを動かしたいと思っています。 /etc/rc3.d において起動スクリプトを記載するとroot権限で起動します。 ある特定のユーザ権限で特定のシェルを動かしたい場合、どのようにすればいいのでしょうか? ご存じの方、ご教示お願いします。

  • シェルが実行されません

    WWWユーザから、 Process process = Runtime.getRuntime().exec("java -classpath /xx/xx/xx /export/home/test/B001"); は動くのですが、 Process process = Runtime.getRuntime().exec("java /export/home/test/B001.sh"); のようにシェルを呼び出しても動作しません。 また、hulftのジョブ起動からもシェルが動かないのですが、原因は何が考えられますでしょうか? シェルのパーミッションは755なのですが・・

  • OS起動時に任意のユーザ権限で自動起動させるには

    はじめまして、tenmaと申します。 OS起動時に任意のユーザ権限にてアプリケーションを 起動させたいのですが上手くいきません。 とりあえず、色々疑問点がありわからないなりに 以下のことを試してみました。 OS起動時に/etc/rcX.d/配下のSXXXが読み込まれる ということなので/etc/rcX.d/Sアプリ名を から 該当アプリへの起動シェルへシンボリックリンクを作成 その後、/usr/sbin/shutdown -y -i6 -g0にてリブート 状況としましてはrcX.dのX部分がrunレベルになるのですが、 who -rでrunレベルを確認できるということですがコマンドを 実行しましたが何もかえってきませんでした。 runレベルがよくわかりませんでしたが、マルチユーザ モードで起ちあがっており、rc3.d配下のファイルは全て リネーム(ファイル名の頭に_)されていたのでrunレベルは 3だろうと推測し、シンボリックリンクはrc3.d配下に 作成しています。 また、起動したとして任意のユーザ権限であがるのかどうか というのも疑問です。 OSについてはsunOS5.9になります。 わかりづらい質問文となってしまいましたが、要するに OS起動時に任意のユーザ権限にてアプリケーションを起動 させたいので、方法が分かる方がいましたら 回答をよろしくお願い致します

  • PostgreSQLの自動起動

    皆さん、こんにちは。 Fedora Core 4にPostgreSQLを入れて、自動起動させようとしています。 /etc/rc.localにpostmaster -Sと書いたのですが、自動起動しません。 パスが通っていないのかとフルパスで指定してもうまく行きません。 postgresユーザでこれを実行するとうまくいきます。 /etc/rc.localに指定すれば、OS起動時に書いてあるものは何でも 動くのではないのでしょうか? どうすればPostgreSQLが自動起動するのでしょうか?

  • Solaris rmコマンドをシェルで実行するとうまくいかない

    オラクルのアーカイブログを定期的に削除するシェルを作ったのですが、rmコマンドがうまくいきません。使っている環境はkshで、業務の都合上rootユーザでシェルを実行しています。 コマンド:/bin/rm -fr /mnt01/arch01/*.log ちなみに、rootユーザでプロンプトからコマンドを手で実行すると削除ができます。 何が原因なのか見当がつかない状況に陥っています。宜しくお願いします。

  • SSH接続時のスーパーユーザー(su?)について

    Linuxは完全な初心者です。 サーバ内のにある、SSHで保護されたデータベースにアクセスしようとしております。 手順として、 (1)SSHでサーバに接続 (2)スーパユーザーになる (3).設定ファイルを編集 /etc/httpd/conf.d/phpmyadmin.conf (4)Allow from (自分の使用しているIP) という一行を追加 (5)Apache(HTTP)の再起動 /etc/rc.d/init.d/httpd reload という事を教えて頂けました。 見よう見まねでなんとかTeraTermでSSH接続するところまで出来ましたが、 (2)のスーパーユーザーになる、という段階で止まっております。 調べたところ【su】【su -】【su - root】あたりのコマンドで、root権限は持てているようなんですが、 (3)のコマンドを打つと【許可がありません】と出てしまいます。 何が間違っているのでしょうか? どなたかご教授頂けましたら幸いです。 宜しくお願いします。

  • Cシェルで複数の命令を実行

    ご無沙汰しております。 業務でUNIX系OSを使用することになったので、教えていただきたいです。 Cシェルにて、packageを呼出し、マスタ更新のシェルを作成しようとしております。 以下作成したCシェル #!/bin/csh sqlplus ユーザID/パスワード@ORACLE_SID declare 変数定義 begin package名.プロシージャ名(引数1, 2, 3); end; / exit -- ここまで-- 上記のシェルを/export/home/oracle/にtest.shと言う名前で作成しており、 /export/home/oracle/test.shにて、実行した結果sqlplusは起動出来ましたが、 プロシージャまで実行してくれないです。 エラーも何も出ているわけではなく、接続に成功後、SQL>と出たままとまってしまいます。 その際、exitと打つと、packageを呼び出そうとしているみたいです・・・。(もちろんここではエラーになります。) Cシェルでこのようなことを実装できる方法をご存知の方、ご教授お願い致します。 ISMSの関係上、業務時間にネットを見ることに制限をかけられ、困ってる次第です。 環境は solaris10 oracle10g です。

  • Macでシェルを起動時にバックグラウンド実行

    Mac OS X 10.9.2を使用しています. シェルスクリプトを,PC起動時にバックグラウンドで実行させたいと思っています. システム環境設定→ユーザーとグループ→ログイン項目 から,実行させたいシェルスクリプトを登録することで,起動時に実行するようにはなったのですが,起動時にターミナルが立ち上がってしまうのが気持ち悪いので,バックグラウンドで実行させたいです. どうすればよいでしょうか,回答よろしくお願いします.

  • "su -"でスーパーユーザになったときの設定ファイルはどこ?

    solaris8を利用しているのですが、 "su -"でスーパーユーザになったときの設定ファイルはどこなのでしょうか? pathを設定したいのですが、 /etc/default/suのSUPATHを変更しても、"su -"した時に 設定したはずのpathが有効になりません。 ご教授いただければ幸いです。

  • Linux(redhat系)の実行ユーザについて

    あるプログラムを実行したときの、実行ユーザについて教えてください。 基本的な質問で申し訳ございません。 (1)/etc/rc.d/init.d/に起動スクリプトを作成し、chkconfigでサーバ起動時に自動起動されるように設定したサービスの実行ユーザは誰になるのでしょうか? (2)あらかじめシステムに組み込まれているサービスで、サーバ起動時に自動起動されるサービス(httpdとか)の実行ユーザは誰になるのでしょうか? また、以下の認識で合ってますでしょうか? (3)cronから起動されるプログラムの実行ユーザは、crontabに設定されている実行ユーザ (4)OSにログイン後、ターミナルを立ち上げて、そのターミナルから起動したプログラムの実行ユーザは、OSにログインしたユーザ よろしくお願い致します。