0

毎日いくつかのジョブの一部として実行する次のコード スニペットがあります。

  system("cp $keyFile  $destinationFile");
  system("chown $userID $destinationFile");
  system("chmod 400 $destinationFile");

上記のコードの問題は、ごくまれに、上記の操作の少なくとも 1 つが正常に完了せず、ジョブが失敗する場合があることです。上記の操作のいずれかが失敗した場合にジョブが失敗しても問題ありませんが、単純なシステム コマンドのいずれかが失敗することは避けたいと考えています。

したがって、次のオプションがあります。

  1. システム コマンドの代わりにPerl サブルーチンFile::Copy::copychmodを使用します。chown
  2. system()コマンドの戻り値を確認してください。これは私が行ったことですが、なぜ失敗するのか説明していません。

システム コマンドの代わりに Perl サブルーチンを使用する方が安全です。私のジョブは常にRHEL5マシンで実行されます [Windows ではありません]。

ここで他にできることはありますか。何がうまくいかなかったのかについて、より多くの情報を収集するにはどうすればよいですか?

更新: ファイル名またはファイル パスには、スペースや奇妙な文字が含まれることはありません。[a-zA-Z]のセットになります。

4

1 に答える 1

4

はい、常に Perl ネイティブ バージョン (File::Copyおよびchmod()) を使用することをお勧めします。

多くの理由の中で:

  • パフォーマンス。system()重い操作である 1 ~ 2 個の新しいプロセス (コマンド用に 1 つ、おそらくシェル用にもう 1 つ) の間で fork を呼び出す

  • エラーチェック。Perl の IO 関連のシステム コールは、"$!"エラーが発生したときにエラー テキスト変数を設定します。

    File::Copy::copy($source, $destination)
        || die "Failed to copy from $source to $destination. Error: $!\n";
    
于 2012-04-21T06:46:51.160 に答える