J'étais sobrement accro à appeler awscli à partir d'un script Python 2.7 enregistré dans crontab

Résumé

Je n'ai pas utilisé boto parce que j'avais l'impression d'avoir une erreur parce que je n'avais accès qu'au fond du seau.

Chose que tu veux faire

$ aws s3 cp s3://hoge/fuga/foo_20160711.txt .

Je veux apporter le fichier de S3. Le nom du fichier change tous les jours en fonction de la date. Si le téléchargement réussit, procédez à l'importation et d'une manière ou d'une autre. Je vais l'appeler avec python pour le moment.

Je l'ai essayé

fetch.py


import datetime
import os
import stat
import subprocess
import tempfile


def main():
	fd, tmp = tempfile.mkstemp()
    os.close(fd)
    os.chmod(tmp, stat.S_IRWXU | stat.S_IROTH)
    filename = 'foo_{}.txt'.format(datetie.datetime.now().strftime('%Y%m%d'))
    subprocess.check_call([
	    'aws',
     	's3',
	    'cp',
	    's3://hoge/fuga/{}'.format(filename),
		tmp,
    	'--quiet',
    ])
	do_something(tmp)

if __name__ == '__main__':
	main()

Créez un code comme celui-ci. Je l'ai exécuté à partir de la ligne de commande et j'ai confirmé que cela fonctionnait, alors je l'ai jeté dans crontab.

0 1 * * * /usr/local/bin/python /home/vagrant/fetch.py

Ce n'était pas bon.

Les raisons ne sont pas bonnes

Quand je regarde l'historique d'exécution, j'obtiens généralement une erreur. ʻIl est dit que la commande aws n'existe pas. Au fait, j'ai entendu quelque part que le fichier de configuration de ʻawscli est dans le répertoire personnel, donc la configuration ne peut pas être lue à moins que le répertoire personnel ne soit spécifié exactement dans la variable d'environnement. Cependant, comme on dit qu'il n'y a pas de commande ʻawsen premier lieu, nous n'avons pas atteint le problème des variables d'environnement. Peut-être qu'il n'y a pas dePATH. Je pense que cela peut être résolu en ajoutant PATH` ou en spécifiant directement l'emplacement de la commande.

Réparer

--Ajouter le répertoire personnel à crontab

HOME=/home/vagrant
0 1 * * * /usr/local/bin/python /home/vagrant/fetch.py

fetch.py


import datetime
import os
import stat
import subprocess
import tempfile


def do_something(name):
	return


def main():
	fd, tmp = tempfile.mkstemp()
    os.close(fd)
    os.chmod(tmp, stat.S_IRWXU | stat.S_IROTH)
    filename = 'foo_{}.txt'.format(datetie.datetime.now().strftime('%Y%m%d'))
    subprocess.check_call([
	    '/usr/local/bin/aws',
     	's3',
	    'cp',
	    's3://hoge/fuga/{}'.format(filename),
		tmp,
    	'--quiet',
    ], env=os.environ.copy())
	do_something(tmp)

if __name__ == '__main__':
	main()

Cela a presque fonctionné.

Recommended Posts

J'étais sobrement accro à appeler awscli à partir d'un script Python 2.7 enregistré dans crontab
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
J'étais accro au grattage avec Selenium (+ Python) en 2020
Ce à quoi j'étais accro avec json.dumps dans l'encodage base64 de Python
J'ai écrit une fonction pour charger le script d'extension Git en Python
J'ai écrit un script pour extraire les liens de pages Web en Python
J'étais accro aux variables de classe et aux variables d'instance erronées en Python
Ce que j'étais accro à Python autorun
Quand j'ai essayé de gratter en utilisant des requêtes en python, j'étais accro à SSLError, donc un mémo de contournement
J'étais accro à la création d'un environnement Python venv avec VS Code
Utilisez Python de Java avec Jython. J'étais aussi accro.
Le nom du fichier était mauvais en Python et j'étais accro à l'importation
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
Python: j'ai pu récurer en lambda
Je veux créer une fenêtre avec Python
Appel de scripts Python à partir de Python intégré en C ++ / C ++
Ce à quoi j'étais accro lors de la création d'applications Web dans un environnement Windows
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux écrire en Python! (2) Écrivons un test
J'ai fait un script pour mettre un extrait dans README.md
J'ai essayé d'implémenter un pseudo pachislot en Python
Un mémorandum pour exécuter un script python dans un fichier bat
Je veux échantillonner au hasard un fichier avec Python
Je veux travailler avec un robot en python.
Une histoire à laquelle j'étais accro chez np.where
Script Python qui crée un fichier JSON à partir d'un fichier CSV
Python: peut être répété en lambda
J'étais accro à essayer logging.getLogger avec Flask 1.1.x
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Notez que j'étais accro au script npm ne passant pas dans l'environnement de vérification
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Comment exécuter un programme Python à partir d'un script shell
Je veux démarrer beaucoup de processus à partir de python
J'ai essayé "Comment obtenir une méthode décorée en Python"
Ce à quoi j'étais accro lorsque l'utilisateur de traitement est passé à Python
Je souhaite envoyer un message de Python à LINE Bot
J'ai écrit un script pour obtenir un site populaire au Japon
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
Je veux ajouter un joli complément à input () en python
[Réparer] J'étais accro au jugement alphanumérique des chaînes Python
J'ai créé un script en Python pour convertir un fichier texte pour JSON (pour l'extrait d'utilisateur vscode)
Quand j'ai essayé d'installer PIL et matplotlib dans un environnement virtualenv, j'en étais accro.
Ce à quoi j'étais accro en traitant d'énormes fichiers dans un environnement Linux 32 bits
Une histoire à laquelle j'étais accro en spécifiant nil comme argument de fonction dans Go
J'étais un peu accro à l'installation de Python3.3 + mod_wsgi3.4 sur Sakura VPS (CentOS), donc une note de révision
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python
Comment passer des arguments à un script Python dans SPSS Modeler Batch
Ce à quoi j'étais accro en présentant ALE à Vim pour Python
Publier un message d'IBM Cloud Functions sur Slack en Python
Une note à laquelle j'étais accro lors de l'émission d'un bip sous Linux
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
J'ai créé un générateur brouillé qui encode vos phrases préférées de UTF-8 à Shift-JIS (cp932) en Python