avec un chemin absolu. --
/ usr / local / bin / aws s3 cp s3: //hoge/fuga/foo.txt bar.txt`.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.
$ 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.
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.
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 de
PATH. Je pense que cela peut être résolu en ajoutant
PATH` ou en spécifiant directement l'emplacement de la commande.
--Ajouter le répertoire personnel à crontab
subprocess.check_call ()
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