• ベストアンサー

crontabでrsyncを含むスクリプトが失敗

FreeBSD上でrsyncを含んだperlスクリプトを作成し、rootでコマンドを手入力すると普通に成功するのですが、そのスクリプトをrootのcrontabに登録して実行すると、rsyncが失敗してしまいます。 このような現象の際に、どのようなミスが考えられるのか教えていただきたいです。 よろしくお願いします。

  • ndoa
  • お礼率38% (14/36)

質問者が選んだベストアンサー

  • ベストアンサー
  • gtx456gtx
  • ベストアンサー率18% (194/1035)
回答No.1

>FreeBSD上でrsyncを含んだperlスクリプトを作成し、rootでコマンドを手入力すると普通に成功 考えられる理由は、PATHが正しく設定されていない可能性かな? 「rsync」なら「/bin/rsync」などパス名を記述して解決すると思います。

ndoa
質問者

お礼

正にこの通りでして、crontabの編集画面の上部にPATHを入力してやる必要があるということを私が知らなかったという、ごく単純な間違いでした。 返答いただきありがとうございました。

その他の回答 (2)

  • nano70
  • ベストアンサー率91% (11/12)
回答No.3

何らかの原因で端末(tty, pty)が必要な操作になっていませんか?

  • trapezium
  • ベストアンサー率62% (276/442)
回答No.2

普通に ports で入れたなら /usr/local/bin/rsync だけどね。 crontab で PATH を設定してないなら /usr/bin:/bin しか見ないし、他の環境変数なんかも ~/.login やらなんやらとは別に設定しとかないといけない。というかログがメールボックスにきてない?

関連するQ&A

  • crontabで実行されない部分がある・・・?

    MySQLに登録されたユーザ名とアカウント名でLinuxのユーザを作る シェルスクリプトを作りました。 ルートにおいてあって、 ./test.sh とすると、 1.useraddでユーザが作られる 2.MySQLの予約テーブルから登録済テーブルにユーザ情報を書き換える 3.FTPユーザ登録がされる というものです。 これをcrontabで走らそうと思いました。 su -でルートになって、 crontab -e * * * * * /test.sh としたのですが、2.3は実行されました。 しかし1.のユーザ作成がされませんでした。 スクリプトいじった記憶はないですが一応確認ということで、 crontabをとめて手動でやってみたところ、1.2.3全て実行されました。 コードも悪くないし、crontab登録もルートでやったのに上手く行かなくて、 途方に暮れています。 何か思いつく原因があったら御教授ください。 お願いします。

  • IE上からrsyncスクリプトを実行したい。

    目的:IEからrsyncスクリプトを実行してWEBサーバAとWEBサーバBの    同期を取り、データを同じにしたいです。    IEのURL欄部分へスクリプトまでのフルパスを入力、実行すると    同期が取れるようにしたいのです。        *現状はIE上では無く、サーバ上からrsyncスクリプトを実行     すると同期が取れます。     コマンド:./test/script/testrsync.pl     IE上からフルパスでtestrsync.plを実行すると     Internal Server Errorとなってしまい、下記のエラーログ     が出てしまいます。 apacheのエラーログ ----------------------------------------------------------- Host key verification failed. rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8] Host key verification failed. rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(463) [sender=2.6.8] [Mon Jun 1 00:00:00 2009] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: /test/script/testrsync.pl ------------------------------------------------------------ rsyncスクリプト ------------------------------------------------------------ #!/usr/local/bin/perl $RSYNC_SCRIPT = "/usr/local/bin/rsync --rsync-path=/usr/local/bin/rsync"; $RSYNC_OPTION = "-azpq -e ssh --delete"; $RSYNC_SVUSER = "user\@serverb:"; $TEST_DIR = "/test/hogehoge"; $REAL_DIR = "/test/hogehoge"; $DEBUG = "debuglog.txt"; open(DEBUG,">$DEBUG"); @SYNCDIR = ( "root/", ); foreach $SYNC (@SYNCDIR){ $CMD = "$RSYNC_SCRIPT $RSYNC_OPTION $TEST_DIR/$SYNC $RSYNC_SVUSER$REAL_DIR/$SYNC"; system($CMD); } close(DEBUG); ------------------------------------------------------------ 現在はcronで定期的に自動更新がかかるようにしておりますが、 同期を取りたい時にIE上からフルパスでスクリプトを実行し サーバAからサーバBへ同期を取りたいです。 色々と調べているのですが、糸口が掴めない状態です。 どなたかお分かりになられればご教示頂きたいです。 よろしくお願い致します。

  • crontab での実行結果が違う

    crontab でのスクリプト実行でほとほと困っています。 以下の処理で、 $test = "FILE"; @orglist = glob("$test*"); ・・・とIE からの実行では通常、配列に "FILE" の付く ファイルが全て格納されることを確認しています。 しかし、まったく同じスクリプトを crontab で 自動実行させてみると、何も配列に入ってこないことが わかりました。 cgi を実行させているマシンは FreeBSD 4.7-STABLE と あります。 何が原因なのでしょうか?

    • ベストアンサー
    • Perl
  • perlスクリプト内でシェルコマンドを実行するには??

    タイトル通りなのですが、perlスクリプト内でシェルコマンドを実行させる方法が分からなく、困っています。 実行したいシェルコマンドはUNIXのcrontab なのですが・・。 また、perlスクリプト内以外でシェルコマンドを実行する方法はあるのでしょうか?? どなたか分かる方いらっしゃいましたらご教授いただけると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • crontab でスクリプトが動かない

    一応環境ですが、 CentOS5 PostgreSQL8 crontabでDBのバックアップを取ろうと思っていますがうまく動作しません。 以下のスクリプトファイルを作成し、crontabで毎日実行しようと考えています。 /home/hogehoge/Maintenance.sh/pg_dumpall.sh (内容)-------------------------------------------------------- #!/bin/sh cd /home/hogehoge/Maintenance.sh pg_dumpall -h localhost -U postgres -c > pg_dumpall.dump chmod 600 pg_dumpall.dump -------------------------------------------------------- crontab (内容)-------------------------------------------------- 0 4 * * * /home/hogehoge/Maintenance.sh/pg_dumpall.sh -------------------------------------------------------- しかし、時間になってもpg_dumpall.dump ファイルが作成されません。 crontab自体は動作しています。(ファイル作成だけをしたらちゃんとできてました) 0-59/2 * * * * /bin/date > /home/sweets/Maintenance.sh/hoge pg_dumpall.sh の内容を1行ずつ実行しても正常にできます。 cd /home/hogehoge/Maintenance.sh pg_dumpall -h localhost -U postgres -c > pg_dumpall.dump chmod 600 pg_dumpall.dump なにかほかにも設定しなくてはいけないことがあるのでしょうか?

  • rsyncをPHPで行いたいのですが、

    いつもお世話になっております。 rsyncをPHPのexecコマンドから行いたいと思っているのですが、 現状、コピー元のサーバー、コピー先のサーバーともroot権限が無い状態ですので、 公開鍵、秘密鍵を作ることができない状況です(root権限無かったら作れないですよね?)。 なので、sshでpassを聞かれても良いのでrsyncを実行しようと思うのですが、 passを聞かれる場合でもPHPのexecコマンドからrsyncを実行することはできますでしょうか? 色々サイトを見ても鍵を生成してパスワードを省略することしか記載されていないので。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • crontab スケジュールを登録

    solaris で crontab -e を叩き、 vi を使って編集をしているのですが、 # export EDITOR=vi # crontab -e */10 * * * * hoge :wq 上記のような操作を実行すると、 "/tmp/crontabKpaG5q" 1 行、18 バイト */10 * * * * hoge crontab: 前の行にエラーがあります; unexpected character found in line. crontab: 入力中にエラーが検出されました。crontab ファイルは生成されません。 っといったエラーメッセージが表示され、 スケジュールを登録する事が出来ません。 試しに crontab -l を実行してみましたがやはり空であり /var/cron/log も確認しましたが、 登録したコマンドが実行された形跡はありませんでした。 お手数ではありますが、皆様のお知恵を貸して下さい。 宜しくお願い致します。

  • ssh + rsync でパスワードを聞かれなくする方法

    SSH + rsync(rsync -e ssh ・・・で ssh 回線で同期)でファイルをコピーする時に、パスワードを聞かれなくする方法はないでしょうか? http://www.okweb.ne.jp/kotaeru.php3?q=323149 などを参考に、公開鍵を作りログイン先のauthorized_keysに登録しました。(公開鍵を作るときにパスフレーズを入力してません。) こうすると、たしかに"パスフレーズ"は聞かれないのですが、"ログインパスワード"は毎回聞かれます。これは仕方がないのでしょうか? ●ファイルのコピー先がファイアーウォールで ssh のポートくらいしか空いていないので、 ssh + rsync を使おうと思っています。 ●同期したいフォルダは複数あるので、スクリプトを作って rsync -avz -e ssh フォルダAを同期 ・・・ rsync -avz -e ssh フォルダBを同期 ・・・ ・・・ という感じで一気に同期できれば便利だな と思っていました。 ところが今のままでは、rsync コマンド一回ごとに ログインパスワードを入力することになってしまいます。

  • IP自動更新スクリプトがうまく動作しません

    環境 FreeBSD9 IP自動更新スクリプトを作成したのですが、うまく動作しません。メールでwget not foundが10分間隔で送られてきます。 wgetコマンドが見つからないと言ってるようです。/usr/local/bin/にwgetコマンドがあります。 また、コマンドラインでもwgetを使用してダウンロードできます。 vi /usr/local/bin/ddo.sh に以下のスクリプトを作成して、実行権限を与えました。 #!/bin/sh wget -O - "http://free.ddo.jp/dnsupdate.php?dn=hogehoge&pw=hogehoge1234" >> /var/log/result.log コマンドプロンプトでddo.shを実行すると、正常にIP更新がされログにその更新内容が記載されます。 スクリプトをcrontab -eに登録しました。 */10 * * * * /usr/local/bin/ddo.sh 10分間隔で実行はされるのですが、wget not found がメールに届き、ログに更新内容の記載がありません。 何がいけないのでしょうか? よろしくお願いします。

  • crontabでDBのバックアップについて

    OS:Redhat ES 2.1 DB:PostgreSQL7.2 という環境のパソコンを2台(A,B)を用意し、 日常業務ではAを更新していき、 深夜にAの内容をBにバックアップする。 といった処理を構築しております。 backup.shというシェルで、 BからAにssh接続し、PostgreSQL内のDBの ダンプを書き出し、 rsyncでダンプファイルをBへコピーし、 B内でリストアするという処理です。 シェルファイルを直接実行した場合は、 問題なく動作するのですが、 crontabに登録して実行させると、 rsyncまでは動作しているのですが、 データベースへのリストアで処理が止まってしまい、 うまくリストアできません。 /etc/crontabファイル内のPathに、 /usr/local/pgsql/binとPostgreSQLのパスも 追加しているのですが、うまく動作せず、 なにが原因かよくわかりません。 ご教授願います。