• 締切済み

自作の起動スクリプトについて

/etc/init.dの下に自作の起動スクリプトを作成しようとしています。 そのなかで、rootユーザではなく、特定のユーザでサービス起動しようとしています。 特定のユーザで起動するためには、環境変数を設定する必要があるのですが、どのように設定するのでしょうか。 たとえば、 -- export USER=hoge export ENV1=abc export ENV2=def su - $USER -c "サービス起動コマンド" -- ここでは、$USERに対して、環境変数$ENV1と$ENV2を設定して、サービスを起動しようとしています。

みんなの回答

  • entree
  • ベストアンサー率55% (405/735)
回答No.2

例えば以下のように書けばできます。 su - $USER -c ' export USER=hoge export ENV1=abc export ENV2=def testprog $ENV1 $ENV2 ' これをダブルクォーテーションにするとtestprogの引数は su -を行ったユーザのものが設定されてしまいます。 ENV1=pqr ENV2=xyz su - $USER -c " export USER=hoge export ENV1=abc export ENV2=def testprog $ENV1 $ENV2 " →testprog pqr xyzが実行されてしまう。 これを応用してこんなこともできます。 HOST1とHOST2のところだけダブルクォーテーションで括っています。 HOST1=abc HOST2=def su - $USER -c ' export USER=hoge export ENV1='"$HOST1"' export ENV2='"$HOST2"' testprog $ENV1 $ENV2 ' →testproc abc defが実行されます。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4856/10272)
回答No.1

su - だと、そのユーザでのログイン処理を行うので、環境変数を引き継ぎません。 ハイフンを付けなければ環境変数を引き継ぎます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • unixのsourceコマンドについて教えて下さい

    環境変数設定で ファイル(hoge.env)に #!/bin/csh set TEST=a と書きます。 unix> source hoge.env と実行すると、$TESTに環境変数が入ることを確認できますが ファイル(hoge.csh)に #!/bin/csh source hoge.env と書き実行すると、環境変数が設定されません。 最近まで、hoge.cshと実行し問題なく環境変数が設定されていたのですが今日は、これまでと違い環境変数が入りません。 こんなことってあるのでしょうか? OSはSunOS 5.8です 以上よろしくお願いします。

  • 一般ユーザーからrootにできない

    vine linux4.2でサーバーを立てているのですが、少々問題が起こりました。 一部のユーザー(hoge)だけがrootになれるよう以下のように設定をしました。 /etc/login.defs SU_WHEEL_ONLY yes /etc/group wheel:x:10:root,hoge /etc/pam.d/su auth required /lib/security/pam_wheel.xo use_uidの#を削除しております。 ある一定の期間までは、この状態で $su - と入力してrootのパスワードを入力すると一般のユーザからrootにすることができました。 ですが、数カ月たってから、 $su - と入力してrootのパスワードを入力すると su: パスワードが違います と出ます。 secureのログを見ると以下の内容が出ます。 (1)はroot から hogeへ 成功 (2)はhoge から rootへ 失敗 (1)Apr 3 14:07:54 sv su: pam_unix(su:session): session opened for user hoge by root(uid=0) (2)Apr 3 14:07:59 sv su: pam_unix(su:auth): authentication failure; logname=root uid=500 euid=500 tty=pts/0 ruser=hoge rhost= user=root また、再起動をしてrootで入ることは可能です。 rootから #su - hoge と入力して hoge に入ることも可能ですが、 逆の場合が不可能です。 以下の方法は何も設定せずにやってみました 一般ユーザーから一般ユーザーへの移動も パスワードが違います とでます。 何か解決策はございませんでしょうか。 今の状態ですと、Tera Termを使ってSSHでの接続は可能ですが、rootになれないためユーザーの追加などがサーバーで操作しなければならない状態です。 よろしくお願いします。

  • vine linux4.2でサーバーを立てているのですが、少々問題が起

    vine linux4.2でサーバーを立てているのですが、少々問題が起こりました。 一部のユーザー(hoge)だけがrootになれるよう以下のように設定をしました。 /etc/login.defs SU_WHEEL_ONLY yes /etc/group wheel:x:10:root,hoge /etc/pam.d/su auth required /lib/security/pam_wheel.xo use_uidの#を削除しております。 ある一定の期間までは、この状態で $su - と入力してrootのパスワードを入力すると一般のユーザからrootにすることができました。 ですが、数カ月たってから、 $su - と入力してrootのパスワードを入力すると su: パスワードが違います と出ます。 secureのログを見ると以下の内容が出ます。 (1)はroot から hogeへ 成功 (2)はhoge から rootへ 失敗 (1)Apr 3 14:07:54 sv su: pam_unix(su:session): session opened for user hoge by root(uid=0) (2)Apr 3 14:07:59 sv su: pam_unix(su:auth): authentication failure; logname=root uid=500 euid=500 tty=pts/0 ruser=hoge rhost= user=root また、再起動をしてrootで入ることは可能です。 rootから #su - hoge と入力して hoge に入ることも可能ですが、 逆の場合が不可能です。 以下の方法は何も設定せずにやってみました 一般ユーザーから一般ユーザーへの移動も パスワードが違います とでます。 何か解決策はございませんでしょうか。 今の状態ですと、Tera Termを使ってSSHでの接続は可能ですが、rootになれないためユーザーの追加などがサーバーで操作しなければならない状態です。 よろしくお願いします。

  • CENTOSでadduserで作成したユーザでログインできない

    *環境 CENTOS4 GNOME bash *症状 [root@myhost ~]# su - hoge su: パスワードが違います ・ルートユーザにもかかわらず一般ユーザにログインできない ・CENTOSのグラフィックログインで一般ユーザで入れない(rootのみ入れる) *ためしたこと root でGUIログインののち、 ユーザ追加 #adduser hoge # id hoge uid=508(hoge) gid=508(hoge) 所属グループ=508(hoge) パスワード設定 # passwd hoge Changing password for user hoge. New UNIX password: Retype new UNIX password: passwd: all authentication tokens updated successfully. shadow確認 # cat /etc/shadow | grep hoge hoge:$1$XkexNO3i$HRO.MkHbbZPn2sImrUJ9O/:13650:0:99999:7::: passwd確認 # cat /etc/passwd | grep hoge hoge:x:508:508::/home/hoge:/bin/bash homeディレクトリ確認 # ls -la /home/ | grep hoge drwx------ 3 hoge hoge 4096 5月 18 01:12 hoge 上記設定のあと、 # su hoge su: パスワードが違います となってしまいます。 初歩的な質問ですが困り果てております よろしくおねがいします。 ちなみにnologinは作成されていません。 # ls /etc/nologin ls: /etc/nologin: そのようなファイルやディレクトリはありません

  • クーロンでJAVA実行するshellを実行。クラスパスを記述したがエラー発生

    OSはUNIXです。 クーロンでshellを起動し、そのshellの中でJAVAコマンドの実行を行いたいのですが、 クーロンで実行する際は、どうもクラスパスを定義しないといけないという話を聞き、 shellの中で、以下のようにクラスパスの部分を追記しました。 #!/bin/sh ##以下2行追記## CLASSPATH=/opt/DynamicWORKs/abc:/opt/DynamicWORKs/services/abc/def export CLASSPATH ##追記はここまで## java aaa.bbb.ccc.ddd/conf/abc.properties クラスパスは、envでたたいたあとでてきたCLASSPATHの記述をそのまま漏れなく記述しました。 そのあと、クーロンで実行したところ、 以下のようなエラーがクーロンのログででました。(abc.shはJAVAを実行するための親シェル) > CMD: sh /usr/local/sh/4/abc.sh > root 17553 c (月) 9月 8 17:24:00 2003 < root 17553 c (月) 9月 8 17:24:02 2003 rc=1 rc=1は明らかに環境変数のエラーだそうです。 しかし、他に一体何が足りないのか!?がさっぱりです。 少しでもヒントをご存知の方、よろしくお願いします。

  • RedHat 起動スクリプト(自作) 規約の存在?

    現在、業務で、RedHatLinuxで動作するプログラムを作成しております。 /etc/init.d 配下に、自作の起動スクリプトを用意して、 プログラムの {start|stop|restart|status}の制御を実行しようと 考えているのですが、 準拠した方がいい規約など、存在するのでしょうか? 例えば、status を知りたいときに、 root$ service hogehoge status と、入力するのですが、 そのときの、”出力は、こうした方がいい”みたいな 参考文献みたいなものは存在するのでしょうか? もし、ご存知の方がいらっしゃったら、 ご教示いただけるとありがたいです。

  • 変数に「.」が含まれる場合...

    例えば・・・ Dim ABC As String '変数ABC の型宣言 ABC = "1.0" DEF = "522" …とまぁ、こんな感じの時。(文法とか、いいかげん) 変数ABCに「.」が含まれている時といない時に 特定の動作をさせたいんです。 変数ABC「.」が含まれていない時 ABC = DEF 「.」が含まれている時 「.」より右の数字を消して ABC & DEF Select Case、もしくはIF文を使って動作させる予定です 変数は、3文字限定です。それと、「.」の位置は 左か真ん中になることもあります。 例)ABC = .12 ABC = 0.1   ABC = 012 …なんとなく、Format関数を使ったら できそうな気がするんですが…。

  • 環境変数に任意の文字列をセット(代入)してcgiへ送るには?

    タイトル通りなのですが、環境変数に任意の文字列をセットしてcgiへそのセットした環境変数ごと送信するにはどうすればよいのでしょうか? 例えば、$ENV{'REQUEST_METHOD'}にABCとセットすれば、cgi側でREQUEST_METHODを参照するとABCが出てくるみたいな。(普通はPOSTやGETですが…) 環境変数を自由に設定できることは分かったのですが、いまいち設定の仕方が分かりません。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • bashのexportによる環境変数設定に関して教えてくださいませ。

    bashのexportによる環境変数設定に関して教えてくださいませ。 複数のファイルに記述している環境変数設定を まとめて実行したい場合はどのようにすればよいでしょうか。 例えば、 ◆hogeファイルの内容 export AAA=aaa soruce ./piyo ◆piyoファイルの内容 export BBB=bbb この状態で、 source hoge とすると、 AAA=aaaは設定されているのですが、 BBB=bbbは設定されないようです。 source の中からsource の記述はできないのでしょうか? source ./piyo 部分を ./piyo にしてもダメでした。

  • 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)のコマンドを打つと【許可がありません】と出てしまいます。 何が間違っているのでしょうか? どなたかご教授頂けましたら幸いです。 宜しくお願いします。

このQ&Aのポイント
  • MP480使用中にインク吸収体の表示が出ました。応急処置方法を教えてください。
  • MP480でインク吸収体の表示が出ています。対処方法はありますか?
  • MP480のインク吸収体表示について教えてください。対処方法を知りたいです。
回答を見る