2 votes

Comment faire tourner un script Python sur un serveur 24/7 ?

J'ai un script Python que je dois exécuter sur AWS 24/7. Comment puis-je le faire ? Devrais-je simplement l'exécuter comme je le ferais localement :

python3 main.py

Ou je devrais l'être :

python3 main.py &

?

Y a-t-il une différence dans l'endroit où je le place : dans le répertoire personnel ? Ou dans le sous-répertoire ? Cela a-t-il une quelconque importance ?

0 votes

En fait, j'aurais un script différent qui est exécuté par cron toutes les minutes qui vérifie si votre script n'est pas en cours d'exécution ou accroché et le tue/redémarre s'il en a besoin avant de sortir.

0 votes

Comment le 2ème script peut-il vérifier si le 1er est en cours d'exécution ?

0 votes

Dans le cas de mon script si la taille du fichier de sortie est la même qu'il y a 1 minute alors quelque chose ne va pas, le fichier de sortie ne devient pas vraiment gigantesque mais s'il est le même qu'il y a 60 secondes alors quelque chose est cassé

4voto

carlwgeorge Points 504

Sur quel système d'exploitation fonctionne-t-il ? Vous devriez fortement envisager d'utiliser le système init natif. Si vous êtes chanceux, vous utiliserez quelque chose avec systemd, et alors un fichier de service est très simple à écrire.

[Unit]
Description=My awesome program

[Service]
ExecStart=/usr/local/bin/awesome.py

[Install]
WantedBy=multi-user.target

3voto

Sergiu Mihuleac Points 53

Il y a plus d'options :

  • vous pouvez faire comme vous l'avez suggéré en utilisant python3 main.py & et ensuite fermer le tuyau ssh (en utilisant sans & fera sortir le script lorsque vous fermez la connexion ssh)

  • vous pouvez définir une tâche cron pour le script.

  • une fois, j'ai fait un simple bash script qui écoutera les nouvelles informations sur un serveur git distant et exécutera le script mis à jour à chaque fois qu'un nouveau changement a été effectué.

    • cela pourrait être une bonne idée si vous prévoyez de mettre à jour le script et d'effectuer différents changements de déploiement ;
    • Je créerais d'abord un script qui s'exécute comme un service au démarrage, vérifiant que tout est ok et à jour, puis il lancera mon script souhaité périodiquement, vérifiant les mises à jour ;
    • n'est pas nécessaire pour utiliser git, un autre exemple pourrait être d'utiliser rsync ;

EDITAR:

Surveillance du script :

  • surveiller les ressources que le vm utilise depuis AWS ;
  • l'envoi d'un courriel contenant les résultats du processus en cours d'exécution sur le système ou une sorte de journal ;
  • créer une mini interface web montrant les services en cours d'exécution ;
  • en utilisant un outil de surveillance comme Sensu, Nagios, Datadog, etc.

0 votes

Comment puis-je surveiller le script pour m'assurer qu'il est en cours d'exécution ?

0 votes

Installez-le comme un service et démarrez-le / surveillez-le avec Monit : mmonit.com/monit

2voto

tmms Points 21

Vous pouvez utiliser screen ( homme )

Pour démarrer votre programme :

  • Connectez-vous avec ssh,
  • Écran de lancement : $ screen
  • Commencez votre programme : $ python3 main.py
  • Détachez l'écran en utilisant la combinaison de touches C-A(Ctrl+A) + D, (ce qui se trouve dans votre session d'écran continuera à fonctionner).
  • Se déconnecter de ssh

Pour vérifier à nouveau l'exécution de votre programme :

  • Se connecter avec ssh (avec le même utilisateur que précédemment)
  • Rattacher à une session d'écran existante en utilisant $ screen -r

0 votes

Ou tmux, pour un seul programme ils sont aussi utiles l'un que l'autre mais tmux est meilleur de manière interactive.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X