πΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ Python Π² Ubuntu ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½: ΠΏΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡπ₯
Π§ΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ Python ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½ Π² Ubuntu, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ systemd. ΠΠΎΡ ΡΠ°Π³ΠΈ:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ½ΠΈΡ-ΡΠ°ΠΉΠ» Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» /etc/systemd/system/my_script.service.
- Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ ΠΈ Π·Π°ΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ».
- ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ ΡΠ½ΠΈΡΠΎΠ² systemd, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΡΠΊΡΠΈΠΏΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
- Π’Π΅ΠΏΠ΅ΡΡ Π²Π°Ρ ΡΠΊΡΠΈΠΏΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΅Π³ΠΎ ΡΡΠ°ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
[Unit]
Description=My Script
After=network.target
[Service]
ExecStart=/usr/bin/python3 /path/to/your/script.py
WorkingDirectory=/path/to/your/script/directory
[Install]
WantedBy=multi-user.target
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ ΡΠΊΡΠΈΠΏΡΡ ΠΈ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π² ExecStart ΠΈ WorkingDirectory ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
sudo systemctl daemon-reload
sudo systemctl start my_script
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ my_script Π½Π° ΠΈΠΌΡ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ½ΠΈΡ-ΡΠ°ΠΉΠ»Π° Π±Π΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ .service.
sudo systemctl enable my_script
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΡΠ΅ΠΌΡ ΡΠΊΡΠΈΠΏΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ.
sudo systemctl status my_script
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ! ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, Π½Π΅ ΡΡΠ΅ΡΠ½ΡΠΉΡΠ΅ΡΡ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ python Π² Ubuntu ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½
Π Ubuntu Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Python Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π΅ΠΌΠΎΠ½Π°. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° (systemd). Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ°, Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΡΡ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ!
Π¨Π°Π³ 1: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Python
Π‘Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΡΠΈΠΏΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Python, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Ρ Π½Π°Ρ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΠΊΡΠΈΠΏΡ Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ "my_script.py", ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ. ΠΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠΊΡΠΈΠΏΡΠ°:
import time
def main():
while True:
print("ΠΡΠΈΠ²Π΅Ρ, Ρ Π΄Π΅ΠΌΠΎΠ½!")
time.sleep(1)
if __name__ == "__main__":
main()
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΊΡΠΈΠΏΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ "ΠΡΠΈΠ²Π΅Ρ, Ρ Π΄Π΅ΠΌΠΎΠ½!" ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠΊΡΠΈΠΏΡΠ° Π½Π° ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄.
Π¨Π°Π³ 2: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΡΠ²ΠΈΡΠ° Π΄Π»Ρ systemd
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» ΡΠ΅ΡΠ²ΠΈΡΠ° Π΄Π»Ρ systemd. ΠΠ½ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΊΡΠΈΠΏΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ systemd Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ°.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» "my_script.service" Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ "/etc/systemd/system/" ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅:
sudo nano /etc/systemd/system/my_script.service
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π² ΡΠ°ΠΉΠ» ΡΠ΅ΡΠ²ΠΈΡΠ°:
[Unit]
Description=My Script
After=network.target
[Service]
ExecStart=/usr/bin/python3 /ΠΏΡΡΡ/ΠΊ/ΡΠ°ΠΉΠ»Ρ/my_script.py
WorkingDirectory=/ΠΏΡΡΡ/ΠΊ/ΡΠ°ΠΉΠ»Ρ/
Restart=always
User=ΠΈΠΌΡ_ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
[Install]
WantedBy=multi-user.target
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ "my_script.py" Π² ΠΏΠΎΠ»ΡΡ "ExecStart" ΠΈ "WorkingDirectory". ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ "ΠΈΠΌΡ_ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ" Π½Π° Π²Π°ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π¨Π°Π³ 3: ΠΠ°ΠΏΡΡΠΊ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ
ΠΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π°Ρ ΡΠΊΡΠΈΠΏΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½. ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
sudo systemctl daemon-reload
sudo systemctl start my_script
ΠΠΎΠΌΠ°Π½Π΄Π° "sudo systemctl daemon-reload" ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ systemd, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠ·Π½Π°Π» ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΡΠ΅ΡΠ²ΠΈΡΠ°.
ΠΠΎΠΌΠ°Π½Π΄Π° "sudo systemctl start my_script" Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½Π°Ρ ΡΠΊΡΠΈΠΏΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ "sudo systemctl stop my_script" Π΄Π»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π΅ΠΌΠΎΠ½Π° ΠΈ "sudo systemctl restart my_script" Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° Π΄Π΅ΠΌΠΎΠ½Π°.
Π¨Π°Π³ 4: ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ°
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ "sudo systemctl status my_script". ΠΠ½Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π²Π°ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ°Π±ΠΎΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΠ°, Π²ΠΊΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ ΡΡΠ°ΡΡΡ, Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΈ Π»ΠΎΠ³ΠΈ.
ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΡ! ΠΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ Python Π² Ubuntu ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ Π΄Π΅ΠΌΠΎΠ½Π°ΠΌΠΈ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅.