Chaque matin, j'ai analysé le mouvement des cours de la veille et préparé un environnement pour exécuter un programme qui envoie automatiquement les résultats par e-mail. Je vais résumer ce que j'ai fait jusqu'à ce que je puisse démarrer le programme automatiquement.
Il est séparé du système d'exploitation qui est généralement utilisé pour un fonctionnement stable. J'ai utilisé Gparted pour installer environ 200 Go d'Ubuntu à partir du disque dur de 2 To que j'utilisais pour le stockage de données. (* Soyez prudent lors du partitionnement d'un disque dur qui contient déjà des données, car il y a un risque de corruption des données)
Ubuntu https://www.ubuntulinux.jp/download Gparted http://www.gigafree.net/system/drive/gparted.html
Procédure d'installation, etc. omise
Lorsque Ubuntu est installé, un chargeur de démarrage appelé GRUB est également installé, modifiez donc les paramètres GRUB et définissez le système d'exploitation de démarrage par défaut sur Ubuntu. Cependant, en gros, Ubuntu devrait être la valeur par défaut, donc si vous n'installez pas 3 systèmes d'exploitation ou plus ou n'utilisez pas d'autres chargeurs de démarrage, il restera tel quel.
La méthode change en fonction du BIOS, et il y en a qui ne peuvent pas être démarrés automatiquement, mais dans mon environnement, c'était comme suit.
Je ne pouvais pas spécifier le jour, donc je n'ai spécifié que l'heure. Il n'y a rien de spécial à faire le samedi et le dimanche, mais j'ai fait un compromis en déterminant le jour dans le programme python et en le fermant les samedis et dimanches ...
Dans le cas de Linux, il semble que vous devriez placer le fichier que vous souhaitez exécuter en premier lorsque le système d'exploitation démarre dans /etc/profile.d/. Est-ce le dossier de démarrage de Windows?
Tout d'abord, j'ai l'autorisation de créer un fichier, comme suit
$ cd /etc/profile.d/
$ sudo gedit auto_start.sh
Le script shell est le suivant
auto_start.sh
#!/bin/sh
cd "Entrez le chemin vers le fichier python"
python analysis.py
Vous pouvez exécuter python directement en spécifiant le chemin absolu sans se déplacer avec cd ici, mais si vous le faites, la destination de sauvegarde csv dans le programme python et le chemin relatif géré lors de l'importation de plusieurs fichiers seront / etc. Il sera traité en fonction de /profile.d/. Par conséquent, j'ai pu éviter un tel problème en déplaçant le répertoire actuel vers le dossier du fichier cible, puis en l'exécutant.
Cependant, si vous faites cela, le répertoire actuel lorsque vous démarrez le terminal sera le dossier du fichier python, vous devez donc le restaurer correctement à la fin.
auto_start.sh
#!/bin/sh
cd "Entrez le chemin vers le fichier python"
python analysis.py
cd
Exécutez le script shell suivant pour l'arrêter.
shutdown.sh
#!/bin/sh
sudo shutdown -h now
Cependant, cela seul ne fonctionne pas. L'utilisation normale de la commande sudo nécessite que l'utilisateur entre manuellement le mot de passe. Cela rend inutile l'automatisation, de sorte que la commande shutdown élimine le besoin de saisir un mot de passe.
Modifiez-y le fichier de configuration sudo. (* Bien sûr, c'est un acte terrible, donc à vos risques et périls)
$ sudo gedit /etc/sudoers
Et ajoutez le contenu suivant à la fin du fichier.
/etc/sudoers
"Nom d'utilisateur" ALL=(ALL) NOPASSWD:/sbin/shutdown -h now
Après cela, vous pouvez appeler ce script shell une fois le traitement cible terminé du côté python.
analysis.py
import subprocess
#Chose que tu veux faire
subprocess.call("./shutdown.sh")
Maintenant que nous avons créé le fichier, donnez l'autorisation d'exécution au fichier de script shell et au fichier python. Sinon, vous obtiendrez une erreur indiquant que vous n'avez pas l'autorisation lors de l'exécution automatique.
$ cd /etc/profile.d/
$ sudo chmod a+x auto_start.sh
$ cd "Chemin vers le fichier python"
$ sudo chmod a+x analysis.py
$ sudo chmod a+x shutdown.sh
Même lors de la connexion pour la maintenance, ce sera un problème si le processus est exécuté et même arrêté, alors évitez cela.
Dans le cas de mon programme, il commence à 8h00 tous les matins et le traitement est terminé à 8h30, donc j'essaie d'exécuter le traitement uniquement lorsqu'il est dans ce délai.
analysis.py
import datetime
d = datetime.datetime.today()
if (d.hour == 8) and (0 <= d.minute <= 30):
#Chose que tu veux faire
#Arrêter le processus
$ sudo shutdown -c
Puisqu'il s'agit d'un usage personnel, il existe de nombreux endroits où le manque de connaissances est compensé de force. Si quelqu'un connaît un meilleur moyen, je l'apprécierais si vous pouviez m'apprendre.
Recommended Posts