アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windows2003上のタスクスケジューラで動かしていたPerlのスクリプトを2008に移行したところ、動かなくなり、原因が判らず困っています。

内容としては、mail_get.plというスクリプトで下記の処理をしています。
1.popサーバーからメールを受信
2.所定のフォルダに添付ファイルを出力
3.複号用バッチファイル(encode.bat)の起動
4.エンコードした結果をメールで送信し、サーバーへファイル転送

3.のバッチファイルを起動するところで、出力される添付ファイルが見つからない、という状態でエラーになります。
不思議なことに上記のスクリプトをタスクスケジューラでなく、手動で動かした場合は正常に動作します。デバッグ表示したところ、パスが通っていないという状況ではないようです。

3.を行う前に時間稼ぎのループを入れれば解決するのかもしれません。

perlはスクリプト言語なので、逐次動作するものと思っているのですが、OSの違いやCPU速度の関係で、先に子プロセスが呼び出されてしまう可能性があるのでしょうか?
同じような経験をされた方はおられないでしょうか?

質問者からの補足コメント

  • バッチファイルのecho offを外して、処理結果をファイル出力にして実行してみました。
    (前略)
    if exist e:\edidata\data.csv goto MAIN
    echo 入力のデータが無いので処理を中止します。 file=e:\edidata\data.csv
    goto ERR_check
    :MAIN
    copy /Y e:\edidata\data.csv e:\edidata\wrk
    set rc=%errorlevel%
    if not %rc% == 0 goto ERR_check
    (後略)
    のCOPYのところで、「0 個のファイルをコピーしました。」となり、後の処理が止まっています。
    コマンドラインだとこのコピーは実行でき、e:\edidata\wrkの中にある同名のファイルは前回分の値が入っていて処理時に掴んでいるものではありません。

      補足日時:2015/07/03 12:54
  • どう思う?

    解決しました。
    タスクスケジューラで、「最上位の特権で実行する」にチェックを入れたら動きました。
    コマンドライン上でもタスクスケジューラの設定でもadministratorでログインした状態で行い、登録時もそのパスワードを入れて登録したのですが、ここにチェックを入れないとadministratorとは見なされないようです。
    お騒がせしました。

      補足日時:2015/07/03 14:15

A 回答 (2件)

タスクスケジューラーもwindows2008も使ってないので完全に勘ですが、


起動状況によってファイルが見つからないと言うのは、パスが通ってないのでは?

例えば普通は起動させた位置がカレントディレクトリになります。
例えばタスクスケジューラーから起動させた場合、の位置がカレントディレクトリになってたりとかはしないですか?
またタスクスケジューラーの仕組みは知らないのですが、どのように起動させてますか?

例えばの一つとして、起動の方法も数多くありますが、
AプログラムがBファイル(perl)の文字列を読み込み、
Aプログラムがその文字列をperlコンパイラに送りつける。
こんな手法が取られていればカレントディレクトリは間違いなくAプログラムの位置です。

ファイルの位置を見つけられないのはPerlですよね?
そして、起動方法によって見つかったり見つからなかったりするわけですよね?
ぱっと思いつく限りでは、明らかにカレントディレクトリが怪しいです。
カレントディレクトリは常に起動された環境に依存するからです。


>先に子プロセスが呼び出されてしまう可能性があるのでしょうか?
スクリプトどうこうは関係ないです。
これについてはどうperlを書いたかによります。
どんな条件下でも間違いなく、必ず処理を待つように書けている保証は必要です。
その確証が得られるように見直しをして下さい。
    • good
    • 0
この回答へのお礼

コメント有難うございます。
カレントディレクトリはタスクスケジューラの開始ディレクトリで指定できるのでそれを信用しています。
Perlで行っている添付ファイルの取得処理が終わる前にバッチファイルでおこなっているエンコード処理が始まっているような感じなのです。ファイルの作成を待って処理を開始させる方法は良く判らないので、時間稼ぎをして起動させてみます。

お礼日時:2015/07/03 08:40

>出力される添付ファイルが見つからない、という状態でエラーになります。


>2.所定のフォルダに添付ファイルを出力

添付ファイルは、ちゃんとそのフォルダーに出力され存在していますか?
あと、フルパスで指定していますよね?
    • good
    • 0
この回答へのお礼

コメント有難うございました。
添付ファイルの存在チェックでエラーになってアベンドしているため、その時のファイル名をprint表示すると正常なフルパスが出てきます。

お礼日時:2015/07/03 08:34

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