cron + rsync + ssh? sh? Ubuntu?

リモートサーバへのファイル転送が成功しません。

何が原因かご指摘いただけませんでしょうか?

# 手動実行なら成功します。
/home/uuu/a/put.sh
sh /home/uuu/a/put.sh

# ところが、cronで実行すると リモートホストへの rsync が成功しません。
crontab -e
* * * * * /home/uuu/a/put.sh

リモートホストへはパスワード入力なしでssh接続できています。

Ubuntu 8.04 (Windows XP上のVirtualbox)

test.sh --------------
#!/bin/bash
export USER=uuu
export DIR=a
export FROM=/home/${USER}/${DIR}/
export TO=${USER}@s74.coreserver.jp:/virtual/${USER}/${DIR}/

# これが成功しません。
rsync -avz ${FROM} ${TO}

# 環境変数は正しく見えます。
echo "rsync -avz ${FROM} ${TO}" > /home/uuu/a/put.log

# パスも通っています。
which rsync >> /home/uuu/a/put.log

# 実行ユーザも正しく見えます。
whoami >> /home/uuu/a/put.log

# ローカルなら正しくrsyncされます。
date +%T >> /home/uuu/a/put.log
rsync -avz /home/uuu/a/ /home/uuu/b/
--------------

何が悪いのでしょうか?

tail /var/log/syslog
Feb 28 00:05:01 ubuntusv /USR/SBIN/CRON[19362]: (uuu) CMD (/home/uuu/a/put.sh)
Feb 28 00:06:01 ubuntusv /USR/SBIN/CRON[19389]: (uuu) CMD (/home/uuu/a/put.sh)
...

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/02/28 20:54:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント100pt

メールは導入されていないので、エラーが見えません。

メール以外でエラーを確認する方法はございますでしょうか?

外部に配信されていないだけで、導入されていないってことは無いでしょう。


それはともかく、

rsync -avz ${FROM} ${TO} >> /tmp/rsync.log 2>&1

とでもすればエラーも含めてファイルに書き込まれます。

ssh接続が成功したかを確認する方法をご存知でしょうか?

接続先サーバーの認証ログを見れば良い。

大抵は /var/log/secure とか。

id:zd2

ありがとうございます!

>>とでもすればエラーも含めてファイルに書き込まれます。<<

こんな便利な方法があるんですね。


ばっちり出ました。

cat /tmp/rsync.log
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password,keyboard-interactive).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(454) [sender=2.6.9]

意味調べてみます。

取り急ぎ返信まで。

接続先サーバの ls /var/log/ は Permission denied でした。

2009/02/28 16:57:34

その他の回答2件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント10pt

crontab のユーザー権限の問題ではないでしょうか。

Ubuntuのcrontabでハマる」が参考になるかもしれません。

id:zd2

ローカルPC内ではrsyncするので権限はあるのではないでしょうか?

2009/02/28 10:08:38
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント27pt

よくあるのはログイン実行時と CRON 実行時の環境変数の違い。


rsync のオプションを以下に変えてみたらどうなります?

rsync -avz -e ssh ${FROM} ${TO}

あとこれでも解決しないなら、エラーがメールで送信されているはずなのでそちらを確認してください。

id:zd2

ありがとうございます。

rsync -avz -e ssh ${FROM} ${TO}

にしてみましたが、成功しませんでした。

sh put.sh

では成功します。


メールは導入されていないので、エラーが見えません。

メール以外でエラーを確認する方法はございますでしょうか?

2009/02/28 16:18:05
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント100pt

メールは導入されていないので、エラーが見えません。

メール以外でエラーを確認する方法はございますでしょうか?

外部に配信されていないだけで、導入されていないってことは無いでしょう。


それはともかく、

rsync -avz ${FROM} ${TO} >> /tmp/rsync.log 2>&1

とでもすればエラーも含めてファイルに書き込まれます。

ssh接続が成功したかを確認する方法をご存知でしょうか?

接続先サーバーの認証ログを見れば良い。

大抵は /var/log/secure とか。

id:zd2

ありがとうございます!

>>とでもすればエラーも含めてファイルに書き込まれます。<<

こんな便利な方法があるんですね。


ばっちり出ました。

cat /tmp/rsync.log
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password,keyboard-interactive).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(454) [sender=2.6.9]

意味調べてみます。

取り急ぎ返信まで。

接続先サーバの ls /var/log/ は Permission denied でした。

2009/02/28 16:57:34
  • id:zd2
    ファイル名は誤記
    × test.sh ------------------
    ○ put.sh -------------------
  • id:pahoo
    ローカルPC内に対するrsyncは、cronで発行して成功したということでしょうか?
  • id:zd2
    >ローカルPC内に対するrsyncは、cronで発行して成功したということでしょうか?
    そうなのです。ローカル内の /a/ → /b/ は成功するのです。cronでも。

    ssh接続が成功したかを確認する方法をご存知でしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません