Isu
- Saya ingin secara otomatis mengunduh file melalui SFTP
- Saya mengatur server SFTP dan mekanisme penguncian
- Saya telah membuat skrip bash sederhana - script.sh
- Saya menambahkan entri di cron untuk skrip
Script, script.sh :
#!/bin/bash
sftp user@server:/home/user/file.txt
exit 0
Menjalankan skrip secara manual berfungsi dengan baik (file teks disimpan di direktori home), tetapi menambahkan script.sh (dengan izin yang tepat) untuk crontab
tidak melakukan apa pun.
Entri crontab:
* * * * * /home/user/script.sh
Untuk otentikasi saya digunakan ssh-keygen
untuk membuat satu set kunci (pribadi, publik) dan mengatur otentikasi silang ke server SFTP.
Untuk otomatisasi skrip saya gunakan keychain
untuk otentikasi tanpa kata sandi.
Saat ini
Saat ini, saya memiliki skrip bernama script.sh yang terletak di direktori home "user" ( /home/user/
).
Ketika dijalankan root
secara manual, skrip mendapatkan file dari server SFTP, dan menempatkannya di /home/user/
.
Itu tidak melakukan tindakan ini ketika dijalankan dari cron
pekerjaan. Di cron
, sftp
perintah mendapat kesalahan.
Ide ide?
Sedang mengerjakannya
- Mengubah variabel HOME pada
/etc/crontab
tidak menyelesaikan masalah - Menyatakan path lengkap dalam script.sh tidak menyelesaikan masalah
- Menyatakan variabel PATH di script.sh tidak menyelesaikan masalah
- Saya menangkap kesalahan dari
sftp
perintah - itu 255
mengeksekusi skrip secara manual ( ./script.sh
) masih berfungsi dengan sempurna ...
sumber
script.sh
lokasinya?root
memiliki akses ke kunci Anda. Anda harus menjalankan pekerjaan crontab sebagai pengguna Anda.sftp -vvv
dan tambahkan output ke pertanyaan, sehingga kita bisa melihat apa yang salah.Jawaban:
Contoh kerja:
skrip sederhana bernama
hello.sh
yang ditambahkan ke file teks kata halo (menggunakan path lengkap untuk setiap perintah):catatan
myuser
adalah nama pengguna Anda#!/bin/bash printf 'hello' >> /home/myuser/hello.txt
membuat skrip dapat dieksekusi menggunakan
chmod +x hello.sh
Entri crontab yang berjalan setiap menit Anda dapat mengubahnya sesuai dengan kebutuhan Anda:
* * * * * /home/myuser/hello.sh
Beberapa detail:
Setiap pekerjaan cron dijalankan sebagai pengguna yang mendaftarkannya. Jika pengguna root mendaftarkan pekerjaan cron, pekerjaan ini akan berjalan dengan hak akses root.
Jika pengguna non root mendaftarkan pekerjaan cron, pekerjaan ini akan berjalan dengan hak pengguna yang disebutkan di atas, jika pekerjaan tersebut membutuhkan hak root, itu akan gagal karena diprakarsai oleh pengguna non root ...
Perintah panggilan dan skrip yang lebih baik menggunakan jalur lengkap hanya untuk memastikan bahwa cron dapat menemukan dan memanggilnya dengan benar, jika tidak, ia akan gagal tanpa umpan balik yang bermanfaat.
sumber
sftp
. Untuk beberapa alasan, ini tidak berfungsi - artinya, file tidak (!) Sedang diunduh dari server atau tidak ditempatkan di direktori home. Terima kasih - tetapi jawaban ini tidak menyelesaikan masalah saya :)