Intentando ejecutar un script de copia de seguridad simple de AWS CLI. Recorre las líneas en un archivo de inclusión, realiza copias de seguridad de esas rutas hasta S3 y volca la salida en un archivo de registro. Cuando ejecuto este comando directamente, se ejecuta sin ningún error. Cuando lo ejecuto a través de CRON, aparece el error "No se pueden ubicar las credenciales" en mi registro de salida.
El script de shell:
AWS_CONFIG_FILE="~/.aws/config"
while read p; do
/usr/local/bin/aws s3 cp $p s3://PATH/TO/BUCKET --recursive >> /PATH/TO/LOG 2>&1
done </PATH/TO/INCLUDE/include.txt
Solo agregué la línea al archivo de configuración después de que comencé a ver el error, pensando que esto podría solucionarlo (aunque estoy bastante seguro de que es donde AWS se ve por defecto).
El script de Shell se ejecuta como root. Puedo ver el archivo de configuración de AWS en la ubicación especificada. Y todo me parece bien (como dije, funciona bien fuera de CRON).
fuente

~/.aws/config.Respuestas:
Si funciona cuando lo ejecutas directamente pero no desde cron, probablemente haya algo diferente en el entorno. Puede guardar su entorno de forma interactiva haciendo
Y haz lo mismo en tu guión
Y luego
diff /tmp/env.cron env.interactivey ver qué importa. Cosas comoPATHson los culpables más probables.fuente
PATHvariable correcta (echo $PATHdirá lo que debería ser) en el script generalmente lo resuelve.Cuando ejecuta un trabajo desde crontab, su
$HOMEvariable de entorno es/El cliente de Amazon busca
o
Si
$HOME=/, entonces el cliente no encontrará esos archivosPara que funcione, actualice su script para que exporte un directorio de inicio real para
$HOMEy luego poner una configuración o archivos de credenciales en
fuente
Pude resolver este problema a través de lo siguiente :
fuente
aws configurees que no tenga que poner credenciales, por ejemplo, en scripts. Vea la respuesta publicada por @chicks para resolver esto correctamente.AWS_ACCESS_KEY_IDniAWS_SECRET_ACCESS_KEYvalores en scripts. La primera línea ya debería haber proporcionado esos valores.Ponga este código antes de que su línea de comando se ejecute en crontab -e
fuente
Los binarios de la herramienta aws cli se instalan en
/usr/local/bin/aws.El error que tuve es que el usuario cron no pudo acceder
/usr/local/bin/awsmientras se ejecutaba; solo puede acceder/usr/bin/Lo que hice fue crear un enlace
/usr/binpara aws con el siguiente comando.También agregué algunos cambios en mi script; Aquí hay una función de muestra:
Y la entrada cron:
Este método funcionó para mi.
fuente
/usr/bin/awses clave para la solución.Esta línea en el
.bashrcarchivo predeterminado para el usuario evitará que los shells no interactivos obtengan el entorno de usuario completo (incluida la variable PATH):Comente la línea para permitir
$HOME/.bashrcque se ejecute desde un contexto no interactivo.También tuve que agregar un
sourcecomando explícito a mi script de shell para configurar el entorno correctamente:Vea esta respuesta para obtener información adicional.
fuente
Todos sabemos que la variable de ruta de entorno $ PATH tiene la ubicación de los archivos binarios. $ PATH de Crontab podría no tener ubicación awscli.
Lo que puedes hacer es encontrar el camino del binario awscli.
y agregue la ruta en $ PATH de crontab agregando la siguiente línea al comienzo de su script (después de shebang).
Esto funcionó para mí!
fuente
Sé que no es la solución perfecta, pero eso funcionó para mí:
fuente
Solo para agregar algo de valor agregado, estaba teniendo problemas con la nueva versión de bash mientras usaba la
awscliherramienta instalada a través de PIP, descubrí que nada funcionaría con esta herramienta con las nuevas versiones de bash.Pude resolver instalando
aws-apitools-ec2esto se puede instalar porAdjunto su guía para más referencia.
http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-clt.pdf
fuente
Tuve el mismo problema, pero después de eliminar la redirección stderr de mi entrada cron (
2>@1), viaws: command not founden el registro.Esto se debe a que AWS cli se instaló en la carpeta de inicio del usuario y agregué una línea a mi usuario
.bash_profilepara agregar la ruta de AWS cli a$PATH. Curiosamente, esta es la forma en que la documentación de instalación de AWS cli le indica que lo instale. Pero el usuario.bash_profileno se utiliza cuando se ejecuta crontab del usuario (al menos no en mi entorno de todos modos).Así que todo lo que hice para solucionar esto fue asegurarme de que mi script crontab también tuviera el aws cli en su camino. Entonces, debajo del shebang de mi guión, ahora tengo
PATH=~/.local/bin:$PATH.fuente
Para mí esto hizo el truco:
El usuario predeterminado en las instancias EC2 de hoy es ubuntu, y la carpeta raíz es la carpeta de inicio de ese usuario. Ahí es donde también existe el aws cli.
fuente
No es el mejor, pero tuve que proporcionar la configuración directamente en mi script shell / bash antes de que los comandos del cliente AWS. me gusta:
fuente