• 締切済み

クーロンでシェル実行、JAVAコマンドが動かない・・

クーロンにて、シェルを自動起動し、JAVAコマンドを動かそうとしています。 cron → abc.sh実行 └def.sh実行 └JAVAコマンド実行 という位置付けです。 まず、 0 3 * * * sh /usr/src/sh/abc.sh という設定にてクーロンを自動実行しようとしました。abc.shの内容はこうです。 #!bin/sh /bin/sh /usr/src/sh/def.sh> /log/def.txt def.txtというテキストは生成されるのですが、def.shが実行されていません。。 def.shの中身はjavaコマンドで、 java aaa.bbb.ccc.ddd/conf/repair.properties というものです。 また、念のため、クーロンに直接 0 3 * * * /bin/sh /usr/src/sh/def.sh ともやってみましたが、結果は同じでした。 どうすればdef.shがちゃんと実行されるでしょうか? そもそもjavaコマンドをクーロンですることはできないのでしょうか?

みんなの回答

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.2

cronから本当に直接 0 3 * * * java aaa.bbb.ccc.ddd/conf/repair.properties > /log/def.txt これでどうでしょうか? ちなみに、abc.shの中でたとえば exec >/tmp/abc.log 2>&1 set -xv というのをいれておくと、どのように実行されたのかをファイルに記録することができます。ご活用ください。

goodtreasure
質問者

お礼

なるほど。その手がありました。明日、やってみて、また報告させていただきます。また、abc.shのなかにexecを入れる方法もやってみようと思います。 ご回答ありがとうございました!

goodtreasure
質問者

補足

昨日はご回答ありがとうございました。今日、早速ご紹介いただいた方法をやってみましたが、やはりだめでした。。 どうも、クーロンで実行する際は、クラスパスを定義しないといけないという話を聞き、shellの中で、以下のようにクラスパスの部分を追記しました。 #!/bin/sh ##以下2行追記## CLASSPATH=/opt/abcdefg/abc:/opt/defghij/services/abc/def export CLASSPATH ##追記はここまで## java aaa.bbb.ccc.ddd/conf/repair.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は明らかに環境変数のエラーだそうです。 他に環境変数で何か足りないのでしょうか??さっぱりです。。。 もしご存知でしたら、で結構です。何かヒントでもあればぜひお願いします。

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.1

こんばんは。シェルスクリプトの1行目は >#!bin/sh ではなく #!/bin/sh としなくてはなりません。変更の上再度お試し下さい。

goodtreasure
質問者

お礼

ご回答ありがとうございます。すいません、これは質問時の誤りです。ご指摘いただいたようにスラッシュは入れていました。正しく書かず、申し訳ございませんでした。そしてご指摘ありがとうございました。以後気をつけます。

関連するQ&A

  • クーロンで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は明らかに環境変数のエラーだそうです。 しかし、他に一体何が足りないのか!?がさっぱりです。 少しでもヒントをご存知の方、よろしくお願いします。

  • sedコマンドをシェルで実行でうまくいかない

    sedコマンドをシェルで実行しようとしています。 sedコマンドの引数がシングルクォートのためうまく出来ずに困っています。 テキスト内の /abc を xxx と変えたいとします。 以下のように作ってみました。 #!/bin/sh a='\/abc' b=xxx sed \'$a/$b\' txt しかし 認識できないコマンドです: '\/abc/xxx' というエラーが出ます。 $aで扱いたい変数は実はもっと長いパスの為、 ぜひ変数を使いたいのですが、うまくやる方法は無いでしょうか。

  • シェルスクリプトで複数実行するには?

    web上からもアクセスできるphpに、定期的にアクセスするようにしたいと思っています。 定期的にアクセスするには、cronを利用すればできると思っていますが、phpへアクセスする方法が分からないために、別の記事にて質問させて頂いています。 (cronが利用できる、レンタルサーバを利用しております。) そこで、いろいろと調べていたところ、.shの拡張子のファイルを作成して、その中に命令事項を記入しておき、cronで.sh(シェルスクリプト?)を実行すれば良いみたいな事が記載されていました。 定期的自動にアクセスしたいphpファイルは複数あるので、phpファイルごとにcronを設定するより、このシェルスクリプトを利用して、複数のphpにアクセスできるようにできれば良いと思いました。 例えば「abc.sh」と言うファイルに、下記を記載してアップロード、パーミッションの設定。 #!/bin/sh/usr/bin/wget -q --spider http://xxx.yyy.com/abc/xxx.php そして、cronで実行日時を設定してこのファイルを実行すれば、「http://xxx.yyy.com/abc/xxx.php」へアクセスするような事が書かれていました。 複数のアドレスにアクセスさせたい場合は、.shのファイルにはどのように記述をすれば良いのでしょうか? またcron終了後にログメールが送信されてきますが、このログメールを送信しないようにするには、どのような記述をすれば良いのでしょうか? 一応調べてみたのですが、確認をお願いします。 abc.sh >/dev/null または abc.sh 2>&1 > /dev/null または abc.sh > /dev/null 2>&1 上記のような、複数の記述方法がありました。 どの記述方法がベターでしょうか。 質問をまとめますと、 複数のphpにアクセスする、シェルスクリプトの記述方法について。 cron終了後のログメールを送信しないようにするための、cronのコマンドの記述方法。 アドバイスを頂けると助かります。

  • シェルコマンドでphpを実行したい!

     さくらインターネットでcron設定を使って月末になると起動するphpを読み込もうとしたいのですが、どうやっても上手くいきません。 いろいろと参考になるサイトはあるのですが、動かない理由がわからないのでどなたか教えてください。  まず、cron設定で設定しているシェルのファイルが置いてあるパスに間違いはありません。  次にシェルファイルに書いてあるコードは以下です。 #!/bin/sh PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin cd /home/自分のID/www/自分で作ったフォルダ/; ./自分で作ったフォルダ/phpファイル という風に書いてあります。 ところが、時間になるとこれが実行されず、 サーバーよりエラーメールが届きます。 [not found]と一言。 …最初、シェルファイルの階層が間違っているかと思ったのですが、 どう見てもあってますし…中身が問題なのかなぁ、と考えます。 何かわかれば、是非教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • sudoでシェルスクリプトを実行させたい

    /usr/bin/sudo を使って、xxx.shを実行させたいので、設定でxxx.shを許可しました。 その後Apacheで動くCGI(perlスクリプト)から、``を使って実行させようと考えています。 このときにこのxxx.shがうまく動きません。多分シェルにアクセスできないのだと思いますが、どうしたらこのスクリプトをroot権限で動かす事ができるようになるのでしょうか。関係あるかどうかわかりませんが、xxx.shの中身はディレクトリ作成コマンドなどです。ネットで検索したら、シェルスクリプトだけ許可にすればよいとあったのですが・・。セキュリティ的には/bin/shを許可するのはまずそうな気がするのですが、こちらを許可してもよいものでしょうか。 環境等 xxx.sh 755 所有者(user1) Apache実行ユーザ (apache) CGIの実行ユーザ(apache?) 挑戦したコマンド(とアパッチのログ) `/usr/bin/sudo sh ./xxx.sh`; ->パスワード求められます (/bin/shの権限がない?) `/usr/bin/sudo ./xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) `/usr/bin/sudo フルパス/xxx.sh`; ->/usr/bin/sudo: unable to exec ファイルのパス No such file or directory (xxx.shのファイルの場所はあってます) 不足の点などあればご指摘ください。

  • cronからのシェル実行と直接シェル実行で違いあり

    (1)ここに、mysqldumpを実行するためのシェルがあります。 → シェルの中身抜粋:  /usr/bin/mysqldump --opt --extended-insert=false --flush-logs --single-transaction --master-data=2 -h ここにホスト -uここにユーザー -pここにパスワード --databases ここにスキーマ > abc.sql (2)crontabに、上記のシェルを実行するよう登録しています。 → 00 13 * * sun /****/***.sh [結果] クーロンから実行されるとと、シェルの全体実行自体は、正常終了していますが、mysqldumpログで「Couldn't execute 'FLUSH /*!40101 LOCAL */ TABLES' : Got an error writing communication packets (1160)」とエラーが出て、ダンプが頭のコメント部のみのファイルしかできていません。 しかし、クーロン実行ではなく、/****/***.shを直接実行すると、mysqldumpも正常出力して、全体的に正常終了できます。 どちらもroot権限で実行しました。 [質問] クーロンからの実行と、直接実行で、なにか別の設定が必要なのでしょうか??

  • "java" が実行できません("java.exe" は実行できる)

    先日 J2SDK 5.0 Update 6 をインストールした際、 この問題に遭遇しました。 PATH も CLASSPATH も正常に設定されています。 しかし、"java" が実行できません。 ところが、"java.exe" とすると実行できます。 これはいったいどういうことなのでしょうか? 以下にいくつかの実行例を載せます。 OS は Windows XP SP1 です。 [実行例] C:\>java [結果] 'java' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 となるのですが、.exe をつけると以下のように Usage が表示されます。 [実行例] C:\>java.exe [結果] Usage: java [-options] class [args...] (to execute a class) 以下、絶対パス指定した場合も同じ結果です。 [実行例] C:\java\jdk1.5.0_06\bin\java [結果] 'C:\java\jdk1.5.0_06\bin\java' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 [実行例] C:\java\jdk1.5.0_06\bin\java.exe [結果] Usage: java [-options] class [args...] (to execute a class)

  • シェルの実行中にユーザ切り替えてコマンド実行

    はじめまして。 シェル初心者です。 shell.shをrootユーザでクーロン実行していますが、 shell.shの処理の中で、違うユーザでコマンド実行したいのですが、 可能かどうかも、方法が分かりません。 教えていただけないでしょうか。 環境はLinuxです。 下記のコマンドを実行したいです。 リモートでログインしてコマンド実行結果を取得する ssh -l tomcat server_tomcat grep test /tmp/test.log ※他のユーザでsshを実行してコマンド結果を取得したいです。 以上。宜しくお願い致します。

  • シェルスクリプトファイルからjavaを実行したい

    シェルスクリプトファイル(拡張子が.shのファイル)からJavaを実行したいのですが上手くいきません。 コマンドラインで直接 cd javaのファイルが置いてあるディレクトリへのフルパス を実行した後 java 実行するクラス名 引数 とすると上手く動きます。 上記2行をshファイルにコピペしてみましたが、エラーになり動きません。 エラーは : No such file or directory cdをしている行とcdで移動しようとしているディレクトリパス Exception in thread "main" java.lang.NoClassDefFoundError: 実行するクラス shファイルの1行目に #!/bin/sh や #!/bin/bash を入れてみましたが、どちらも挙動が変わりません。(エラーのまま) shファイルはUTF-8を文字コードにして改行はLFのみです。 また、javaコマンドを実行するとき -cp や -classpath 引数でjavaのファイルが有るディレクトリを指定してみましたが挙動が変わりません。 shの実行はコマンドラインから sh shファイル(絶対パスで) source shファイル(絶対パスで) でやってみましたが駄目でした。 javaのファイルが有るディレクトリに対してパスを貼ってみましたが挙動が変わりません。 コマンドラインからコピペしてshファイルを作っていますので、フォルダ名等のつづりミスの可能性は低いと思います。 何か設定が足りないのでしょうか? よろしくお願いいたします。

  • [シェルスクリプト内で bashコマンド後のコマンドが実行されない]

    [シェルスクリプト内で bashコマンド後のコマンドが実行されない] 以下の様にシェルスクリプトを記述するとコマンド2が実行されません。 #! /bin/sh コマンド1 bash コマンド2 bash環境でコマンド2を実行させるにはどうしたら良いのでしょうか?