シェルの中でユーザを変更する方法とは?

このQ&Aのポイント
  • rootユーザとoracleユーザでジョブをcronに登録していますが、処理時間がかかった場合の対応策は?
  • root_bat.shとoracle_bat.shを一つのシェルにまとめたいが、ユーザ変更の方法がわからない。
  • rootユーザからoracleユーザに変更する方法やoracleユーザでシェルを起動する方法を教えてください。
回答を見る
  • ベストアンサー

シェルの中でユーザを変更(root→oracle)するには?

rootとoracleユーザで2つのジョブをcronに下記のように登録しています。 rootユーザのcrontab----- 0 10 0 0 0 /root_bat.sh oracleユーザcrontab----- 0 11 0 0 0 /oracle_bat.sh 10:00 にroot_bat.shの処理が終わってから 11:00 のoracle_bat.shの処理が始まらなければならないのですが、 もしroot_bat.shの処理が1時間以上かかった時にも対応できるように、 root_bat.sh とoracle_bat.shを一つのシェルにまとめたいと思ってます。 ですが、ユーザの変更をどうやって実現していいかわからずに困ってます。 root_bat.sh(Bシェル)の中で、 rootからoracleユーザになるにはどうやればいいのでしょうか? もしくは、oracleユーザでoracle_bat.sh(Cシェル)を起動するとか。。

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

  • ベストアンサー
  • Teariss
  • ベストアンサー率30% (3/10)
回答No.1

root_bat.shの中から oracleユーザでoracle_bat.sh(Cシェル)を起動するには、 以下のコマンドをroot_bat.shの最後に追加すればいけると思います。 su -c oracle "/oracle.bat"

kaeru_007
質問者

お礼

できました! ありがとうございました!!

関連するQ&A

  • sqlplusの操作をシェル上で

    RedhatLinuxのシェルスクリプト上で Oracleのsqlplus操作を行うことは可能でしょうか? その場合、どのように記述すればよいでしょう? やりたい内容の例としては以下になります。 #!/bin/sh su -<oracleユーザー> sqlplus ※※※※ SQL> update ※※※ set ※※※ SQL> exit 上のような内容をcronに登録して自動処理をかけたいと考えています。

  • 権限の違うシェルスクリプトの実行

    3つのシェルスクリプトがあります。 ●root権限で実行  aaa.csh ●ユーザ指定権限で実行 bbb.csh ●root権限で実行 ccc.csh この3つのシェルスクリプトはaaa.csh →bbb.csh →ccc.cshの順番でバッチ処理として cronに設定したいのですが、 権限が違うのでroot権限のcrontabとユーザ指定のcrontabに それぞれ設定しなくてはいけません。 あまりスマートではないかと思い、 何かよい方法はないかと質問させて頂きました。 3つのシェルスクリプト1つシェルスクリプトにまとめてroot権限のcrontabに設定してしまう方法とかどうでしょうか? ちなみにスクリプトの処理の内容は単純なファイルコピーなどです。 意味分かりますでしょうか? よろしくお願いします。

  • Bシェル内でのユーザー変更

    お世話になっております。 あるBシェルをJP1に登録しジョブ実行しようとしています。 Bシェル内には複数の処理があり、必要に応じてユーザー変更を行う必要があるのですが上手く行きません。 なお、禁止事項にrootユーザーでJP1実行、suid、guidの未指定があり上手く対応が出来ません。 どなたか上手く行く方法をご存知ありませんか? 行いたい処理は以下の通りです。 (1)実行ユーザーで実行 (2)posgreユーザーでログイン (3)ダンプファイルを取得 (4)posgreユーザーをログアウト (5)sshユーザでログイン (6)ダンプファイルを移動 (7)sshユーザをログアウト (8)終了 環境は シェルはBシェル OSはRHEL5.3 です。

  • crontabでのシェル自動実行がNG

    いつも参考にさせてもらっています。 linux(Red Hat Enterprise Linux ES release 3 Apache/2.0.46)上でcrontabを設定したいのですが、 現在うまくいっておりません。 まず、autoindex.shというシェルを/home/foo/scripts/ディレクトレィに作成しました。中身は3行からなっていて #!/bin/sh cd /var/www/html/search/index mknmz -a /var/www/html/test です。telnet上でroot権限を使用し、./autoindex.shコマンド発行で正常に動作しました。 そこで、crontabに以下のように # crontab -l 50 11 * * * root /home/foo/scripts/autoindex.sh と設定したところ、 # more /etc/log/cron Sep 27 11:50:01 intra crond[18280]: (root) CMD (root /home/foo/scripts/autoindex.sh ) とcronは決めていた時間(11時50分)に稼動しているようなんですが、mailを見ると # mail -t From root@XXX.com Wed Sep 27 11:50:01 2006 Date: Wed, 27 Sep 2006 11:50:01 +0900 From: root@XXX.com (Cron Daemon) To: root@XXX.com Subject: Cron <root@hoge> root /home/foo/scripts/autoindex.sh X-Cron-Env: <SHELL=/bin/sh> X-Cron-Env: <HOME=/root> X-Cron-Env: <PATH=/usr/bin:/bin> X-Cron-Env: <LOGNAME=root> X-Cron-Env: <USER=root> /bin/sh: line 1: root: command not found と、シェルがこけているようです。 何か解決のヒントがありましたら、ぜひ教えていただけないでしょうか。

  • rsyncのバックアップシェルの自動実行について

    下記のサイトを参考にbackup.shを作成しました。 http://bird2009.blogspot.com/2008_12_01_archive.html 「sh backup.sh」でバックアップできたのですが、 自動実行するためにcrontabに「0 1 * * * root /root/backup.sh」と登録しましたが、 バックアップされません。 /var/log/cronをみるとエラーはでておらず実行されているようなのですが。。 何が問題なのかわからず困っています。 よろしくお願いします。

  • Bシェルにてユーザの実行可否

    シェルにてrootユーザのみ実行が出来るようにしたいと思い、以下のようなシェルを書きました。 が、root以外のユーザでも実行が可能となってしまっています。実行する上でシェル、またはシェル以外で影響はあるのでしょうか?ご存知でしたらご教授願います。 ※今回はユーザID:user1で作成+実行しています。 ※このシェルのアクセス権限は"-rwxr--r--"としています。 #!/bin/sh UID=`whoami` if [ $UID -ne root ] then echo "実行はrootのみ" fi -以降、その他の処理が続く-

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

  • シェルスクリプトでPHPを実行したい

    シェルスクリプトでPHPを実行したいのですが、うまくできません。 centos5でcrontabに 20 0 * * * /bin/sh /var/www/html/test/test.sh と登録しています。 cronのlogをみたところ Dec 12 00:20:01 localhost crond[19060]: (root) CMD (/bin/sh /var/www/html/test/test.sh) と記録されていてここまでは問題ないように思えます。 test.shの中身は #!/bin/sh cd /var/www/html/test/ php -f daily.php > result exit になっています。 daily.phpが実行されないので、daily.phpに何かおかしなところがあるのかと思い daily.phpを直接ブラウザから起動してみたところ問題なく処理されました。 このような経緯でtest.shの中身が間違っていると思っているのですがどこが間違っているのか分かりません。 どなたかアドバイス頂けると助かります。

  • シェル内で自動ユーザ変更

    SunOS 5.10を使っていますが シェルを実行するのはAやBなど同一グループに属すユーザとしてシェルと作成し、 シェルの中で実行されるコマンドや子シェルはXというAやBと同一グループだけど 単一ユーザにしたいのですがそういう事は可能ですか? ・rootユーザはNG ・パスワードの入力は対話型でするのではなく自動化させたい ・rshやrloginなどは使いたくない ・恒久的にXというユーザのパスワード入力が省略されるのはNG などが条件です。 要はツールをシェルで作って実行するユーザはマルチユーザ化したいが シェル内ではパスワード入力などマルチユーザが意識しないで処理が止まる事なく 単一ユーザで処理させたい、出力したファイルなどの所有者も 単一ユーザとなるのようにしたいのですが。 わざと抽象的に書いていますが、なにか方法はありますでしょうか?

  • PHPからcronを編集したい

    ブラウザから時間を指定してリクエストを投げると下記PHPを実行するプログラムがあります。 shell_exec("echo {$pass} | sudo -S sh -c 'cat {$root_dir}/craw/crontab.txt > /var/spool/cron/crontabs/{$cron_user}'"); shell_exec("echo {$pass} | sudo -S chown {$cron_user}:crontab /var/spool/cron/crontabs/{$cron_user}"); shell_exec("echo {$pass} | sudo -S chmod 600 /var/spool/cron/crontabs/{$cron_user}"); 実行はちゃんと行われて、/var/spool/cron/crontabs/userの中身もちゃんと期待したとおりに変更されています。 しかし、いくら待っても登録したjobが実行されることはありません。(/var/log/syslogを見ても実行された形跡はありません) shell_exec("echo {$cron_pass} | sudo service cron restart"); を付け加えてみても結果は同じでした。 crontab -eで編集→保存とするとちゃんと反映されるようです。 どのようにすればPHPからcronを登録できるでしょうか。 よろしくお願い致します。