cron では Rsync に問題があり、手動では問題ない

cron では Rsync に問題があり、手動では問題ない

rsync コマンドを起動する backup.sh ファイルがあります。この rsync は、raspbian を実行している RaspberryPi 上の専用サーバーをバックアップするためのものです。

(キーチェーンを使用しているので、パスワードなどを入力する必要はありません...)

問題は、バッチを手動で起動するとすべてが機能するが、crontab(同じユーザー)の場合は次のエラーが発生することです。

2013/10/07 19:36:02 [6456] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
2013/10/07 19:36:02 [6456] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]

これが私のbackup.shファイルです

#!/bin/bash

echo "_ backup start "$(date +%H:%M:%S)
echo " "

/usr/bin/rsync -avh --rsync-path='/usr/bin/rsync' --delete --log-file='/home/user/rsync.'$(date +%d%m%Y-%H%M%S)'.log' --rsh='ssh -p 1234' [email protected]:/path/to/archives/ /media/backup/

echo " "
echo "_ backup end "$(date +%H:%M:%S)

そしてcrontab行(crontab -e)

# m h  dom mon dow   command
 30 5  *   *   *     /home/user/backup.sh | mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) [email protected]

よろしく

答え1

(キーチェーンを使用しているので、パスワードなどを入力する必要はありません...)

さて、cron ジョブで実行されているプログラムにキーチェーンを見つける方法を伝える必要があります。

SSH は、環境変数を介して SSH エージェント (キーチェーンがエミュレートする) を探しますSSH_AUTH_SOCK。そのため、crontab でこの環境変数を設定する必要があります。

一般的な構成では、SSH_AUTH_SOCKはランダムな名前を持つソケットへのパスです。keychain を使用しているため、そのソケットの別名は簡単に見つけることができます。keychain は、およびその他の同様の変数 ( 、 )~/.keychainを設定する環境変数宣言を含むファイルを に書き込みます。したがって、適切なファイルを cron ジョブに含めるだけです。SSH_AUTH_SOCKSSH_AGENT_PIDGPG_AGENT_INFO

[email protected]
30 5  *   *   *     . ~/.keychain/$(hostname)-sh; /home/user/backup.sh

(余談ですが、cron にはジョブの出力をメールで送信する組み込み機能があり、ジョブが何らかの出力を生成した場合にのみメールを受信します。 をいじる必要はありません| mail。)

答え2

cronjob からの ssh 接続が機能していません。SSH 認証はどのように実行すればよいのでしょうか? ID キーやパスワードをリストする試みは表示されません。それが機能する方法であれば、(パスワードなしの...) キーへのパスに '-i' を貼り付けます。コマンド ラインと cronjob の主な違いは、環境 (環境変数、制御端末の欠如など) による傾向があります。

答え3

あなたの件に関して引用の問題があると思います:

mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) [email protected]

こうあるべきです:

mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]

代替アプローチ

メールもスクリプトに含めます。

#!/bin/bash

(
  echo "_ backup start "$(date +%H:%M:%S)
  echo " "

  /usr/bin/rsync -avh --rsync-path='/usr/bin/rsync' --delete \
     --log-file='/home/user/rsync.'$(date +%d%m%Y-%H%M%S)'.log' \
     --rsh='ssh -p 1234' [email protected]:/path/to/archives/ /media/backup/

  echo " "
  echo "_ backup end "$(date +%H:%M:%S)
) | mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]

次に、crontab エントリを次のように変更します。

30 5  *   *   *     /home/user/backup.sh

また、この cron を実行しているアカウントが実際に電子メールを送信できることを確認してください。テストを行ってください。

関連情報