問題
- SFTP経由でファイルのダウンロードを自動化したい
- SFTPサーバーとキーメカニズムをセットアップしました
- 簡単なbashスクリプトを作成しました -スクリプト
- スクリプトのエントリをcronに追加しました
スクリプト、スクリプト:
#!/bin/bash
sftp user@server:/home/user/file.txt
exit 0
スクリプトを手動で実行すると問題なく動作します(テキストファイルはホームディレクトリに保存されます)が、スクリプト(適切な権限がある場合)crontab
何も起こりません。
crontab エントリ:
* * * * * /home/user/script.sh
認証のために、ssh-keygen
キーのセット (秘密、公開) を作成し、SFTP サーバーへの相互認証を設定していました。
keychain
スクリプトの自動化には、パスワードなしの認証を使用しました。
現在
現在、私はスクリプトに位置する"ユーザー"ホームディレクトリ(/home/user/
)。
手動で実行するとroot
、スクリプトは SFTP サーバーからファイルを取得し、 に配置します/home/user/
。
ジョブから実行された場合、このアクションは実行されませんcron
。 ではcron
、sftp
コマンドはエラーを取得します。
アイデアは?
取り組んでいます
- 変更する家変数をオンにしても
/etc/crontab
問題は解決しませんでした - フルパスの指定スクリプト問題は解決しなかった
- 述べるパス変数スクリプト問題は解決しなかった
- コマンドからエラーを見つけました
sftp
- それは255
ただし、スクリプトを手動で実行すると ( ./script.sh
)、問題なく動作します...
答え1
実際の例:
hello.sh
テキスト ファイルに hello という単語を追加する、という名前の簡単なスクリプト(各コマンドにフル パスを使用)。
注記 myuser
あなたのユーザー名です
#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt
スクリプトを実行可能にするには、chmod +x hello.sh
1 分ごとに実行される crontab エントリは、必要に応じて変更できます。
* * * * * /home/myuser/hello.sh
詳細:
各 cron ジョブは、それを登録したユーザーとして実行されます。root ユーザーが cron ジョブを登録すると、このジョブは root 権限で実行されます。
非 root ユーザーが cron ジョブを登録すると、このジョブは前述のユーザーの権限で実行されます。ジョブに root 権限が必要な場合は、非 root ユーザーによって開始されるため失敗します...
cron がコマンドとスクリプトを正しく見つけて呼び出せるように、完全なパスを使用してコマンドとスクリプトを呼び出すことをお勧めします。そうしないと、有用なフィードバックなしで失敗する可能性があります。