Asunto
- Quiero automatizar la descarga de un archivo vía SFTP
- Configuré un servidor SFTP y un mecanismo de claves.
- He creado un script bash simple:script.sh
- Agregué una entrada en cron para el script.
La secuencia de comandos,script.sh:
#!/bin/bash
sftp user@server:/home/user/file.txt
exit 0
Ejecutar el script manualmente funciona bien (el archivo de texto se guarda en el directorio de inicio), pero agregarscript.sh(con los permisos adecuados) para crontab
no hacer nada.
La entrada de crontab:
* * * * * /home/user/script.sh
Para la autenticación, solía ssh-keygen
crear un conjunto de claves (privada, pública) y configurar la autenticación cruzada en el servidor SFTP.
Para la automatización de scripts utilicé keychain
la autenticación sin contraseña.
Actualmente
Actualmente tengo un script llamadoscript.shubicado en el"usuario"directorio de inicio ( /home/user/
).
Cuando se ejecuta root
manualmente, el script obtiene el archivo del servidor SFTP y lo coloca en formato /home/user/
.
No realiza esta acción cuando se ejecuta desde un cron
trabajo. En cron
, el sftp
comando recibe un error.
¿Ideas?
Trabajando en ello
- Cambiando elHOGARLa variable activada
/etc/crontab
no resolvió el problema. - Indicando rutas completas enscript.shno resolvió el problema
- declarandoCAMINOvariables enscript.shno resolvió el problema
- Capté el error del
sftp
comando: es255
Sin embargo , ejecutar el script manualmente ( ./script.sh
) todavía funciona perfectamente...
Respuesta1
Un ejemplo práctico:
un script simple llamado hello.sh
que agrega a un archivo de texto la palabra hola (usa rutas completas para cada comando):
nota myuser
es el nombre de tu usuario
#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt
Haga que el script sea ejecutable usandochmod +x hello.sh
La entrada de crontab que se ejecuta cada minuto puede cambiarla según sus necesidades:
* * * * * /home/myuser/hello.sh
Algunos detalles:
Cada trabajo cron se ejecuta como el usuario que lo registró. Si el usuario root registra un trabajo cron, este trabajo se ejecutará con privilegios de root.
Si un usuario no root registra un trabajo cron, este trabajo se ejecutará con los privilegios del usuario antes mencionado; si el trabajo requiere privilegios de root, fallará porque lo inicia el usuario no root...
Es mejor llamar a comandos y secuencias de comandos usando rutas completas solo para asegurarse de que cron pueda encontrarlos y llamarlos correctamente; de lo contrario, puede fallar sin comentarios útiles.