26

次のような部分を持つスクリプトがあります。

for file in `ls *.tar.gz`; do
  echo encrypting $file
  gpg --passphrase-file /home/$USER/.gnupg/backup-passphrase \
    --simple-sk-checksum -c  $file
done

何らかの理由で、このスクリプトを手動で実行すると、完全に正常に動作し、すべてのファイルが暗号化されます。これを cron ジョブとして実行すると正常に動作しecho $fileますが (ログに "encrypting <file>" と表示されます)、ファイルは暗号化されず、gpg サイレントは stdout/stderr 出力なしで失敗します。

手がかりはありますか?

4

7 に答える 7

24

答えは思ったより簡単だったことがわかりました。パラメータがあり--batchません。gpgはcronジョブには存在しない/dev/ttyから読み取ろうとします。--exit-on-status-write-errorparamを使用したことをデバッグします。$?しかし、それを使用するために、Cd-Manが提案したように、エコーによって報告された終了ステータス2に触発されました。

于 2008-09-02T17:48:02.243 に答える
7

私の場合、gpgはキーを使用するためのホームディレクトリを見つけることができません:

gpg: no default secret key: 秘密鍵なし

gpg: 0003608.cmd: 署名 + 暗号化に失敗しました: 秘密鍵がありません

だから私は追加しまし--homedir /root/.gnupgた。最後のコマンドは次のようになります

エコー 'パスワード' | gpg -vvv --homedir /root/.gnupg --batch --passphrase-fd 0 --output /usr/share/file.gpg --encrypt --sign /usr/share/file.tar.bz2

于 2011-10-02T06:20:03.107 に答える
1

cronjob の実行中に GPG がパスにあることを確認する必要があります。あなたの最善の推測は、GPGのフルパスを取得し(実行してwhich gpg)、フルパスを使用して実行することです(たとえば/usr/bin/gpp...)。

その他のデバッグのヒント:

  • GPG の実行後に の値を出力します$?(例: echo "$?")。これにより、成功した場合は0になるはずの終了コードが得られます
  • STDERR を GPG の STDOUT にリダイレクトし、STDOUT をファイルにリダイレクトして、出力される可能性のあるエラー メッセージを調べます (これはコマンド ラインで実行できます/usr/bin/gpg ... 2>&1 >> gpg.log) 。
于 2008-09-02T16:15:26.927 に答える
0

@skinp Cron ジョブは sh によって実行されますが、最新の Unix のほとんどは対話型ログインに bash または ksh を使用します。(私の経験では)最大の問題は、 sh が次のようなことを理解していないことです。

export PS1='\u@\h:\w> '

次のように変更する必要があります。

PS1='\u@\h:\w> '
export PS1

したがって、cron が最初の構文を使用して環境変数を定義するシェル スクリプトを実行すると、他のコマンドを実行する前に、sh が変数を定義しようとして爆発するため、他のコマンドは実行されません。

于 2008-09-03T23:04:32.830 に答える
0

cron ジョブを実行しているユーザーが、ファイルの暗号化に必要な権限を持っていることを確認してください。

于 2008-09-02T16:02:43.790 に答える
0

私は一度この問題に遭遇しました。

理由はわかりませんが、cron がユーザーと同じ環境変数で実行されるとは思えません。

実際、プログラムを適切に実行するには、適切なパスをエクスポートする必要がありました。gpg は少なくとも実行しようとしていますか?

または、cron の実行時に実際に暗号化しようとしているファイルは現在のディレクトリにありますか?

echo whereis gpgスクリプトでandを実行して、echo $PATH含まれているかどうかを確認してみてください...うまくいきました。

于 2008-09-02T16:09:05.117 に答える