クーロンで二つのバッチをスケジュールしてるのですが
 二つ目のバッチが動きません。 
 なにが原因なのでしょうか? 

** cron_file の変更** 

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.18554 installed on Tue Apr 4 13:15:59 2000)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
0 0 * * * /u02/oradata/bat/A001.bat > /u02/oradata/bat/A001.log
0 * * * * /u04/tanaka1/bat/B001.bat > /u04/tanaka1/bat/B001.log

  * /u04/tanaka1/bat/B001.bat が 動かない

   B001.bat は chmod 777 で実行権限を付与
   
   $ B001.bat と 打つと

   コマンドが見つからない と エラーメッセージが出ます。

   一つ目のバッチは A001.log のタイムスタンプから動作してると思われます。    

このQ&Aに関連する最新のQ&A

A 回答 (5件)

crondは、実行したコマンドが(標準出力または標準エラー出力に)何らかの出力した場合、その内容をコマンド実行ユーザにメールします。



質問のcrontabだとstderrがリダイレクトされてないので、エラーがメールされてると思われます。メール配送システムが使えればですが。
crondからメールが届いてないか確認するか、stderrをファイルにリダイレクトしてみては。

参考URL:http://www.itmedia.co.jp/help/tips/linux/l0388.h …
    • good
    • 0
この回答へのお礼

bat/B001.bat 1>STD.LOG 2>ERR.LOG

と 書けば

標準出力も
エラー出力も
ファイル化されるので

デバッグしやすいって事ですね。

お礼日時:2005/04/21 20:05

> telnetで


> /u04/tanaka1/bat/B001.bat
> と打つと動作しますが

スクリプト自体は正常に動作するようですね。

> クーロンに組み込むと途中で
> 止まってるようです。

と言うことになるとtelnetでログインして実行した環境とcronで実行した時の環境の違いにより正常に動作しなくなるようですね。

この途中で止まっているというのはエラーになって終了、もしくはスクリプトに記述したコマンドが動作したままだんまりのどちらでしょうか?
エラーになるのでしたら、エラーメッセージが出力されていれば、そのエラーメッセージからどうすればいいかが分かるかもしれません。

ちなみにtelnetでログインして実行した時のユーザは、cronに登録した時のユーザと同一ユーザでしょうか、それとも別なユーザでしょうか?
(たぶん、結果からすると別ユーザでしょうかね)

cronに登録した時のユーザで同様にスクリプトファイルを実行するとcronで実行した時と同じく途中で止まりますか?

この回答への補足

>ちなみにtelnetでログインして実行した時のユーザは、cronに登録した時のユーザと同一ユーザでしょうか、
>それとも別なユーザでしょうか?

同一ユーザです。

補足日時:2005/04/21 22:29
    • good
    • 0

>$ B001.bat と 打つと



>   コマンドが見つからない と エラーメッセージが出ます。

これは、No.1の方も書いている通り、コマンドのサーチパス(環境変数PATH)に「B001.bat」が存在するディレクトリが無かっただけでは?

確認したかった事はcrontabに書いてあるように

# /u04/tanaka1/bat/B001.bat

と実行した場合には正常に動作するのかどうかという事です。

この回答への補足

>確認したかった事はcrontabに書いてあるように
># /u04/tanaka1/bat/B001.bat
>と実行した場合には正常に動作するのかどうかという事です。

 telnetで
 /u04/tanaka1/bat/B001.bat
 と打つと動作しますが

 クーロンに組み込むと途中で
 止まってるようです。

補足日時:2005/04/21 19:41
    • good
    • 0

cronでcrontabで設定した内容が実行されたかは、cronのログ/var/log/cronを見れば分かります。


以下のようなログが残っていれば、cronからは起動されたという事です。

○/var/log/cronの出力例
 「/bin/date > /tmp/LOG」をユーザrootで実行した場合
-------8<-------8<-------8<-------8<-------8<-------
Apr 16 15:41:01 FedoraCore3 crond[4918]: (root) CMD (/bin/date > /tmp/LOG)
-------8<-------8<-------8<-------8<-------8<-------

もしcronのログから「B001.bat」が起動されており、標準出力に何らかの出力があるのに標準出力をリダイレクトしたファイルに何も出力されていない場合、指定した「B001.bat」に問題があるとしか思えません。

No.2の方が書かれているようにcronからのメールがないか確認するか、標準エラー出力をファイルにリダイレクトして確認した方がいいでしょうね。

ところで、指定した「B001.bat」は、cronで実行させようとしているユーザ(crontabコマンド実行時のユーザ)でそもそも正常に動作する事は確認しているのでしょうか?

P.S.
この質問に関連すると思われる質問をしていらっしゃると思いますが。
それらについて出来れば質問の内容が解決したのなら質問を締め切ってもらえないでしょうか?
解決したのかしていないのか反応がないため分からないので。

この回答への補足

>ところで、指定した「B001.bat」は、cronで実行させようとしているユーザ(crontabコマンド実行時のユーザ)で
>そもそも正常に動作する事は確認しているのでしょうか?

$ B001.bat と 打つと

   コマンドが見つからない と エラーメッセージが出ます。

質問自体は自宅で
動作確認は会社でやってるので
この質問に対する結果は
4月18日(月)にならないと分かりません。

補足日時:2005/04/16 18:30
    • good
    • 0

$ B001.bat



でコマンドがないエラーとなるのは、カレントディレクトリにパスがないからではありませんか?その実行ファイルのあるディレクトリで

$ ./B001.bat

でもダメでしょうか。

cronが動かないのはちょっと理由がわかりませんが、/var/log/message(あるいは何らかのログ)にcrondからのログが出ていると思いますので、それを見たら何か手がかりがあるかもしれません。

この回答への補足

$ ./B001.bat

で動きました。

/var/log/message

は現在のユーザーでは
アクセス権限がありませんでした。

補足日時:2005/04/22 18:40
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QDOSコマンドで、標準出力を出力しないようにするには?

Windowsのバッチファイルでコマンドを実行する際、標準出力をディスプレイに表示したくないのですが、どのようにするのが、一般的なのでしょうか?
CDで実行するので、ファイルに出力はしたくありません。
UNIXとかだと、nullにパイプするようなのですが…。

Aベストアンサー

>UNIXとかだと、nullにパイプするようなのですが…。

リダイレクトですね。

同様です。
標準出力だけなら「c:\> command > nul」
エラー出力もなら「c:\> command > nul 2>&1」

Qcronの実行結果をメールで受け取りたい

debian3.1でcrontabに
MAILTO=***@***.co.jpを追加しました。
MAILTO=も初めは記載されていなかったので追加しました。

その後postfix2.1.5をインストールしましたが、
cron実行結果が送られてきません。

cron.logやmail.errにもメールに関するエラーは一切ありません。
何の設定が足りないのでしょうか?

Aベストアンサー

#2,#4です。
見当違いだったらごめんなさい。そのcronから起動される処理は何かメッセージを出すんですよね?何も出力しない処理なら、メールはそもそも送られません。

あと、MAILTO=の行を削除すると処理出力はcrontabのローカル実行ユーザー宛てにメールされるはずですが、その点はどうですか?

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

Qgrepで検索文字列が完全一致した行だけ取り出す方法

grepの文字列検索で検索文字列が単語として、完全一致した行だけ取り出す方法はないでしょうか?

通常は
grep hoge hoge.txt

と打つと、hogeが含まれる行が出力されますが、今回は含まれる行ではなくて完全に文字列が一致した行だけ取り出したいのです。

例えばhoge.txtの中に
cc ghoge
kkl hogem
jjll hoge
という3行があったとしたら最後の行でhogeという文字が空白で区切られた行だけ取り出したいのです。

何かよい方法があれば教えてください

Aベストアンサー

-w オプションじゃだめですか?

参考URL:http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html

Qshellスクリプトから別のshellスクリプトを呼び出す方法

今現在VineLinux4.1をサーバとして起動させております。
その関係もありまして維持としてシェルを動かす事はある意味必須の状態です。
本題はAと言うスクリプトからBと言うスクリプトを呼び出す方法がわかりません。
試してみた方法はsourceで呼び出す方法です。
A.shの中身を以下とすると

#!bin/bash
echo ="B.shを呼び出します"
source B.sh
echo ="シェルスクリプトを終了します"
exit 0

上記のようにした場合、最初のecho文は出力され、B.shの内容を一通り終えると最後のechoは出力されずA.shは完了しません。
ごくごく基本的なことかもしれませんが、うまく検索にも引っ掛けられなかったので、ご質問させていただきます。
よろしくお願い致します。

Aベストアンサー

#2です。

>cshは=の前後にスペースが入るかと思いますが、今回はbashを指定しておりますので。

cshの何のことを言ってるのかわかりませんが、例えばbashで、
echo="シェルスクリプトを終了します"
は、echoコマンドじゃなくて、echo というシェル変数に「シェルスクリプトを終了します」という文字列をセットするコマンドになります。当然何も表示されません。

>A.shとB.shは単独で正常に稼動できる状態です。

B.shが単独で正常に動いているように思えることは、B.shに問題がないことを意味しません。
例えば、B.sh をexitで終了したりするとそこでbashは終了するわけだし。

>質問の例はあくまで例ですが、

書かれているA.shに問題がなさそうなので、B.shの中に原因があると想像しました。
現象が発生する最小限の、A.sh と B.sh の内容をすべて正確に書いてください。

今気づきましたが、A.sh の最後に無意味なexit 0がありますが、もしかして、B.shの最後にもexit 0が?

source コマンドは、その場所に指定したファイルの内容を挿入するコマンドです( C の #include 相当 )。もし、新たにbashプロセスを起動して、そこでB.shを動かしたいなら、
bash B.sh
です。他には#1の方が書いた方法もあります。

#2です。

>cshは=の前後にスペースが入るかと思いますが、今回はbashを指定しておりますので。

cshの何のことを言ってるのかわかりませんが、例えばbashで、
echo="シェルスクリプトを終了します"
は、echoコマンドじゃなくて、echo というシェル変数に「シェルスクリプトを終了します」という文字列をセットするコマンドになります。当然何も表示されません。

>A.shとB.shは単独で正常に稼動できる状態です。

B.shが単独で正常に動いているように思えることは、B.shに問題がないことを意味しませ...続きを読む

QMySQLに良いCPUスペックは?

MySQLに良いCPUスペックは?

MySQL専用にサーバーを稼動させていますが、スペックの良いサーバーに変えようと思います。
ただ、「MySQLは1プロセスで動作するので、CPUのコア数が多くしても効果が出ない」と聞いた気がしますが、本当でしょうか?
確かに、現在MySQL専用に使っているサーバーでは、CPU使用率が一つのCPUのみに偏って高くなっています(CPUを使い切れば均等になるのかもしれませんが、実際の使用感は重いです)。

通常の用途で考えるとコストパフォーマンスは悪くなりますが、1コア1CPUでなるべく高いスペックのCPUのサーバーを探すべきでしょうか? いまどきマルチコアでないサーバーもなかなかないのでは…?

ちなみに現在の利用環境は、
  CentOS 5
  MySQL 5.0
です。

Aベストアンサー

MySQLはマルチスレッドプログラムですので、同時並列で処理できる処理に関しては、使えるCPUの数が多ければ多いほど性能は上がります。

ただし、1つのクエリを処理するのは1スレッドなので、1つのクエリの処理性能は1つのCPUコアの性能に依存します。

なので、Webアプリのような同時並列で多数のクエリを処理することを求められるサーバーならCPUコアの多いサーバーのほうが有利になりますし、バッチ処理のような計算量の多いクエリがいくつか実行するだけならCPUコア1つあたりの処理能力の高いサーバーが有利になります。

実際には、CPUの処理性能よりDisk I/Oの性能がボトルネックになることが多いので、まずは何がボトルネックになっているのかちゃんと現状を把握してからサーバーを変えたほうが良いでしょう。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Q正規表現での最後尾のバックスラッシュの扱いについて

使用しているSQLテーブルで、フィールド名siteurlに格納しているURLの最後尾にスラッシュがついているものとついていないものがあるので、つけるように統一しようと思います。

PHPを書き、実行したところ、次のようなエラーが出てきました。
Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in C:\xampp\htdocs\sql_open.php on line 42

この部分のコードは次の通りです。
if(!preg_match("\/$",$row["siteurl"])){ //行末がスラッシュでないならスラッシュを追加する
$row["siteurl"].="/";
}

エラーの内容を考えて、コードを以下のように修正したところ、
if(!preg_match("\/$",$row["siteurl"])){ //行末がスラッシュでないならスラッシュを追加する
$row["siteurl"].="/";
}

というエラーが出てきます。
preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\sql_open.php on line 42


正規表現はあまり得意ではなく、どこかしら間違いがあったのかもしれませんが自分ではわかりません。
この問題の解決方法をご教示ください。どなたかご教示のほど、どうかよろしくお願いします。

使用しているSQLテーブルで、フィールド名siteurlに格納しているURLの最後尾にスラッシュがついているものとついていないものがあるので、つけるように統一しようと思います。

PHPを書き、実行したところ、次のようなエラーが出てきました。
Warning: preg_match() [function.preg-match]: No ending delimiter '/' found in C:\xampp\htdocs\sql_open.php on line 42

この部分のコードは次の通りです。
if(!preg_match("\/$",$row["siteurl"])){ //行末がスラッシュでないならスラッシュを追加する
$row["site...続きを読む

Aベストアンサー

http://www.php.net/manual/ja/reference.pcre.pattern.syntax.php

PCREで使えるパターンの書き方をよく読みなおしましょう。
特に「デリミタ」のところ。
http://www.php.net/manual/ja/regexp.reference.delimiters.php

エラーも
> No ending delimiter
終了のデリミタが無い

> Delimiter must not be alphanumeric or backslash
デリミタはアルファベットやバックスラッシュであってはならない

と出てます。


人気Q&Aランキング

おすすめ情報