cronから実行されているbashスクリプトからのFTPが機能しない


0

cronMySQLデータベースといくつかのファイルのバックアップを作成するために実行されるスクリプトがあります。tarボールを作成して暗号化したopenSSH後、リモートFTPサーバーに配置する必要があります。ftp部分のコードは次のとおりです。

    HOST='abcd.dyndns.biz'
    USER='username'
    PASSWD='password'
    FILE='myBack-'${LOCAL_HOST}'-'${DATENAME}'.enc.tar.gz'
    DIRNAME='/usr/local/backups/'

    cd ${DIRNAME}

    ftp -n ${HOST} <<END_SCRIPT
    quote USER ${USER}
    quote PASS ${PASSWD}
    cd backup
    lcd ${DIRNAME}
    put ${FILE}
    quit

END_SCRIPT

コマンドラインからスクリプトを直接実行すると、> sudo ./mybackup.shスムーズに実行されてバックアップファイルがftpに配置されますが、実行中はcron他のpre-ftpおよびpost-ftp(ログファイルの統合や電子メール送信など)結果)ステップは正常に動作します。ログファイルからも何も取得できず、原因を特定することもできません。

注:-dyndns.bizのIPは、プランを支払ったため変更されません。


1
タスクの後にレポートをcronメールで送ってくれませんか?mailコマンドでログを見つけることができます。cronが適切な権限で実行されていることを確認しましたか?
M'vy

@ M'vy cronはルートとしてジョブを実行しています。
-TheVillageIdiot

関連するセクションはcrontab -lどのように見えますか?
カーク

sudo crontab -l `。#mh dom mon dowコマンド0 22 * * * / usr / local / backups / osback.sh`
TheVillageIdiot

回答:


3

代わりにCurlのアップロード機能を使用してください。

curl --upload-file "$FILE" --user "$USER:$PASSWD" "ftp://$HOST/backup/"

再び同じ問題がコマンドラインから機能しますが、cronで失敗します:(
TheVillageIdiot

スクリプトからも動作しますが、別のシステム上の同じスクリプトで問題が発生しました。何が起こっているのか手掛かりが得られる場合は、これを参照してください:superuser.com/questions/299496/curl-not-uploading-file-to-ftp
TheVillageIdiot

cronのは、デフォルトでは非常に制限されたパスを使用してパスを指定してみます。/ usr / binに/カール...
LatinSuD

0

えーと。失敗する理由はいくつかあります。

  1. 入力を送信しているときにftpが接続を開いたことはわかりませんが、おそらくそれがあなたの面倒をみてくれます(ftpのプログラムに馴染みのない人は、何でもかまいません)。
  2. ftp://コマンドをセミコロンまたは改行で区切っていない-\ nまたは;を追加してみてください。再びあなたのアプリが望むものをidk

  3. ファイルを配置する前に、ファイルが実際に存在することを確認していません。


バッチからコマンドを取得できない場合、どのようにsudo ./mybackup.sh成功しますか?ファイルは、スクリプトの終了後も存在しているため、存在します。
-TheVillageIdiot

ftpコマンドがテキスト文字列をフィードするときにクラッシュしたりエラーを返さないからといって、引数またはコマンドとしてトークンを受け入れるわけではありません。つまり、使用しているftpコマンドを使用してそのように実行できることをどこかで見た場合は先に進みます。認証、cdなどを行った後、それに対処する必要があります-stdinからの単純なリダイレクトでは処理されませんが、期待されます。
ЯрославРахматуллин

次に-あなたの変数はおそらく失敗しています。$ {LOCAL_HOST}と$ {DATENAME}はどこで定義されていますか?cronは「裸の」環境でコマンドを実行しますが、sudoとはまったく異なります。標準の$ {HOSTNAME}の何が問題になっていますか?気にしないでください。$ {FILE}が存在し、すでに説明した「myBack-。enc.tar.gz」のようなものではないことを確認してください。
ЯрославРахматуллин

@ЯрославРахматуллин私はスクリプト全体を入れておらず、変数が存在し、すべてのファイルが作成されており、このftpのみがショー全体を
あざけります-TheVillageIdiot

別のツール(別のftp)を実行するか、期待してftpを実行してください。がんばろう。
ЯрославРахматуллин

0

私は同様の問題を抱えていました。私にとっての解決策:このような変数なしでディレクトリを直接参照する:

lcd /mpla/mpla2/dir1
cd  /mpla3/mpla4/dir2

そしてそれは働いた。この変更のみ。quote USER $usernameそして quote PASSWD $password中括弧なしではなくあるとして残されました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.