Bisher habe ich Heroku als Cloud-Plattform verwendet. Da ich jedoch die Möglichkeit hatte, auf EC2 zu migrieren, habe ich die Lösung zusammengefasst, auf die ich während der Migrationsarbeit gestoßen bin, und Punkte, die beim Bereitstellen von Webanwendungen auf EC2 zu beachten sind. Es war.
Diesmal wird die folgende Verzeichnisstruktur angenommen
root
├── etc
│ └── systemd
│ └── system
│ └── sampled.service
└── home
└── ubuntu
└── sample
└── sample.py
Es ist ein Python-Programm, das jede Minute "OK" ausgibt.
sample.py
#!/usr/bin/env python3
import syslog
from apscheduler.schedulers.blocking import BlockingScheduler
sched = BlockingScheduler()
@sched.scheduled_job("interval", minutes=1)
def sample():
syslog.syslog("OK")
sched.start()
In meinem Fall ist ein Fehler in der Telefonauthentifizierung aufgetreten und ich konnte nicht fortfahren. Daher habe ich einen Support-Fall erstellt und um Support gebeten.
Immerhin dauerte es fast eine Woche, bis das Callcenter einen manuellen Vorgang durchgeführt hatte und das Konto verfügbar wurde. Wenn Sie also eine Fehlermeldung erhalten, erstellen Sie einen Support-Fall und lassen Sie ihn sofort bearbeiten!
Zunächst werde ich über die Punkte schreiben, die beim Erstellen einer EC2-Instanz zu beachten sind.
Beim Erstellen einer EC2-Instanz wählen Sie das zu verwendende AMI aus. Grundsätzlich ist es besser, das Amazon Linux-System auszuwählen. Dies ändert jedoch die Methode zum Erstellen des Daemon-Prozesses, der später eingeführt wird.
Überprüfen Sie bei der Bereitstellung unter Bezugnahme auf eine Site zunächst, welches AMI Sie verwenden, bevor Sie fortfahren!
Der nächste Punkt, den Sie beachten sollten, wenn Sie ein Programm zu einem Daemon machen.
Wie ich bereits geschrieben habe, ändert sich die Herstellungsmethode je nach verwendetem AMI.
Da diesmal Ubuntu 20.04 verwendet wurde, befand sich die Diensteinstellungsdatei zum Dämonisieren des Programms am folgenden Speicherort.
Hängt vom verwendeten AMI ab
Ubuntu: /etc/systemd/system/sampled.service
Der nächste zu beachtende Punkt beim Umgang mit Umgebungsvariablen im Daemon.
Dies ist der größte Stolperstein beim Festlegen der Umgebungsvariablen des Dämons.
Grundsätzlich gibt es kein Problem, wenn Sie den folgenden Befehl eingeben, um das Programm vom Terminal aus auszuführen.
$ SAMPLE=123456789
$ export SAMPLE
$ echo $SAMPLE
>>> 123456789
Wenn Sie Umgebungsvariablen persistent machen möchten
sudo vi /etc/profile
Wenn Sie die Umgebungsvariablen auflisten, die Sie festlegen möchten, werden sie beim nächsten Start angewendet.
/etc/profile
SAMPLE=123456789
export SAMPLE
Jedoch!!
Der Daemon liest diese Umgebungsvariablen nicht <<< wichtig hier !!
Erstellen wir also eine Umgebungsvariableneinstellung, die dem Dämon wie folgt gewidmet ist
/etc/sysconfig/sampled_env
SAMPLE=123456789
Fügen Sie außerdem die angegebene Umgebungsvariable zu den Diensteinstellungen hinzu, damit der Dämon sie lesen kann.
/etc/systemd/system/sampled.service
'''
Kürzung
'''
[Service]
#Nachtrag
EnvironmentFile=/etc/sysconfig/sampled_env
'''
Kürzung
'''
Geben Sie danach den folgenden Befehl ein, um die Diensteinstellungen neu zu laden und den Dämon neu zu starten.
$ sudo systemctl daemon-reload
$ sudo systemctl restart sampled
Geben Sie danach den folgenden Befehl ein. Wenn das aktive Element aktiv ist (ausgeführt wird), ist es erfolgreich.
$ sudo systemctl status sampled
>>> sampled.service - sampled daemon
>>> Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>> Active: active (running)
>>> '''
>>>Kürzung
>>> '''
Wenn Sie das Programmprotokoll überprüfen möchten, können Sie es mit dem folgenden Befehl überprüfen!
$ sudo journalctl -u sampled
>>> Jul 29 17:50:24 ip-Ausgelassen abgetastet.py[Kürzung]: OK
>>> Jul 29 17:51:24 ip-Ausgelassen abgetastet.py[Kürzung]: OK
Als nächstes gibt es Hinweise zu Dateiberechtigungen.
Ich bin gestolpert, weil ich beim Demonstrieren eines Programms die Dateiberechtigungen nicht richtig eingestellt habe.
Wenn Sie den folgenden Befehl wie zuvor eingeben und das aktive Element fehlgeschlagen ist (Ergebnis: Exit-Code), vermuten Sie einen Berechtigungsfehler.
$ sudo systemctl status sampled
>>> sampled.service - sampled daemon
>>> Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>> Active: failed (Result: exit-code)
>>> '''
>>>Kürzung
>>> '''
Wenn ein Fehler "Berechtigung verweigert" angezeigt wird, wechseln Sie zunächst in das Verzeichnis mit der Datei, die Sie dämonisieren möchten, und geben Sie den folgenden Befehl ein.
~/sampled
$ ls -l
>>> -rw-r--r-- 1 root root 1052 Jul 29 17:16 sample.py
Überprüfen Sie die Zugriffsberechtigung der vom Befehl angezeigten Datei. Geben Sie den folgenden Befehl ein, wenn sie sich von dem in der Diensteinstellungsdatei des Dämons beschriebenen Benutzer und der Gruppe unterscheidet.
/etc/systemd/system/sampled.service
'''
Kürzung
'''
[Service]
User=sample
Group=sample-group
'''
Kürzung
'''
Mit den obigen Einstellungen
#Dateiberechtigungen ändern
$ sudo chown sample:sample-group /home/ubuntu/sample/sample.py
$ sudo chmod 755 /home/ubuntu/sample/sample.py
#Bestätigung der Änderung der Dateiberechtigung
$ ls -l
>>> -rwxr-xr-x 1 sample sample-group 1052 Jul 29 17:16 sample.py
#Starten Sie den Daemon neu
$ sudo systemctl restart sampled
#Anzeige des Daemon-Betriebsstatus
$ systemctl status sampled
>>> sampled.service - sampled daemon
>>> Loaded: loaded (/lib/systemd/system/sampled.service; enabled; vendor preset: enabled)
>>> Active: active (running)
>>> '''
>>>Kürzung
>>> '''
Wenn das aktive Element jetzt aktiv ist (ausgeführt wird), sind Sie fertig !!
Es war schwierig, bis ich verschiedene Dinge tun konnte, weil ich normalerweise kein Linux benutze, aber es wird sehr praktisch sein, wenn ich es beherrsche, also werde ich weiter lernen!
Immerhin ist AWS erstaunlich
Danke für Ihren Besuch.
Recommended Posts