Tập lệnh python để khởi động lại dịch vụ trong linux

Trong phần này, chúng tôi sẽ trình bày cách chạy tập lệnh python dưới dạng dịch vụ systemd, cho phép bạn khởi động nó khi khởi động máy Linux và duy trì hoạt động của nó

Phương pháp kiểm tra. bot điện tín

Chúng tôi sẽ sử dụng bot Telegram rất cơ bản để kiểm tra xem tập lệnh của chúng tôi sẽ

  1. Tự khởi động khi máy khởi động
  2. Tự động khởi động lại khi gặp sự cố/thoát vì bất kỳ lý do gì

Nếu bot còn sống, điều đó có nghĩa là phương pháp của chúng tôi hoạt động. Tất nhiên, chúng tôi cũng sẽ có thể kiểm tra trạng thái của dịch vụ thông qua systemd, nhưng chỉ để đảm bảo. Bot này sẽ gửi cho chúng tôi

  1. Tạo thư mục ~/Temp trên Raspberry Pi của bạn bằng SSh
  2. Tạo một môi trường ảo trong ~/Temp, bạn đã có sẵn
    [.env] dietpi@solidsnake:~/Temp$ pip install --upgrade pip
    [.env] dietpi@solidsnake:~/Temp$ pip install pytelegrambotAPI
    
    5 chúng tôi đã cài đặt nó ngay từ đầu
dietpi@solidsnake:~/Temp$ python3 -m venv .env
  1. Tải môi trường ảo.

    [.env] dietpi@solidsnake:~/Temp$ pip install --upgrade pip
    [.env] dietpi@solidsnake:~/Temp$ pip install pytelegrambotAPI
    
    6

  2. Hãy cũng cập nhật pip và cài đặt một pip mà chúng ta cần

[.env] dietpi@solidsnake:~/Temp$ pip install --upgrade pip
[.env] dietpi@solidsnake:~/Temp$ pip install pytelegrambotAPI
  1. Tạo bot. py.
    [.env] dietpi@solidsnake:~/Temp$ pip install --upgrade pip
    [.env] dietpi@solidsnake:~/Temp$ pip install pytelegrambotAPI
    
    7

Hãy cho bot của chúng tôi

  • Một tin nhắn trợ giúp

# -*- coding: utf-8 -*-
import telebot

bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]

@bot.message_handler[commands=['help', 'aide']]
def send_welcome[message]:
    text = """
Help !
"""
    bot.reply_to[message, text]
    
bot.polling[]

  1. Kiểm tra kịch bản của bạn.
    [.env] dietpi@solidsnake:~/Temp$ pip install --upgrade pip
    [.env] dietpi@solidsnake:~/Temp$ pip install pytelegrambotAPI
    
    8

Bây giờ hãy biến tập lệnh này thành một dịch vụ systemd

Trên Dietpi

Quan trọng

Tất cả các đường dẫn trong tập lệnh của bạn phải là đường dẫn tuyệt đối, không thể có đường dẫn tương đối trong tập lệnh của bạn. Nếu có các đường dẫn tương đối mà bạn phải giữ, bạn sẽ phải thay đổi thư mục làm việc hiện tại của mình bằng cách truy xuất

  1. Sửa đổi tập lệnh python, thêm dòng đầu tiên.
    [.env] dietpi@solidsnake:~/Temp$ pip install --upgrade pip
    [.env] dietpi@solidsnake:~/Temp$ pip install pytelegrambotAPI
    
    9 là đường dẫn đến con trăn trong môi trường ảo
  2. # -*- coding: utf-8 -*-
    import telebot
    
    bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]
    
    @bot.message_handler[commands=['help', 'aide']]
    def send_welcome[message]:
        text = """
    Help !
    """
        bot.reply_to[message, text]
        
    bot.polling[]
    0 tệp python để làm cho nó có thể thực thi được, nó sẽ thực thi với python bạn đã chỉ định [không cần tự tải venv, chỉ cần thực thi mà không chỉ định thùng python]
  3. Nhập lệnh sau vào thiết bị đầu cuối của bạn để thêm dịch vụ systemd
    # -*- coding: utf-8 -*-
    import telebot
    
    bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]
    
    @bot.message_handler[commands=['help', 'aide']]
    def send_welcome[message]:
        text = """
    Help !
    """
        bot.reply_to[message, text]
        
    bot.polling[]
    1
dietpi@solidsnake:~/Temp$ python3 -m venv .env
0
  • Lưu ý rằng ExecStart là đường dẫn trực tiếp đến tệp Python nếu bạn biến nó thành tệp thực thi bằng môi trường ảo phù hợp. Nếu không, thì bạn phải chỉ định tệp nhị phân python để thực thi nó

  • Chúng tôi phải thêm độ trễ ExecStartPre nếu không dịch vụ sẽ cố gắng khởi động trước khi có internet và chúng tôi gặp lỗi này

dietpi@solidsnake:~/Temp$ python3 -m venv .env
1
  • Chúng tôi cũng thêm cờ Khởi động lại để systemd luôn khởi động lại tập lệnh nếu nó bị lỗi

Sử dụng Ctrl X + Y để lưu và thoát khi chỉnh sửa xong

  1. Kích hoạt dịch vụ
    # -*- coding: utf-8 -*-
    import telebot
    
    bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]
    
    @bot.message_handler[commands=['help', 'aide']]
    def send_welcome[message]:
        text = """
    Help !
    """
        bot.reply_to[message, text]
        
    bot.polling[]
    2
  2. Khởi động lại, đợi trong 30 giây
  3. Hãy thử liên hệ với bot của bạn bằng
    # -*- coding: utf-8 -*-
    import telebot
    
    bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]
    
    @bot.message_handler[commands=['help', 'aide']]
    def send_welcome[message]:
        text = """
    Help !
    """
        bot.reply_to[message, text]
        
    bot.polling[]
    3, Tất cả đều tốt
  4. SSH vào RPi của bạn
  5. Kiểm tra trạng thái dịch vụ của bạn.
    # -*- coding: utf-8 -*-
    import telebot
    
    bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]
    
    @bot.message_handler[commands=['help', 'aide']]
    def send_welcome[message]:
        text = """
    Help !
    """
        bot.reply_to[message, text]
        
    bot.polling[]
    4
  6. Thao túng dịch vụ của bạn
dietpi@solidsnake:~/Temp$ python3 -m venv .env
5
  1. Hãy xác thực rằng nó sẽ thực sự khởi động lại khi gặp sự cố. Hãy thêm một chức năng vào bot của chúng ta để giết chết tập lệnh. Bằng cách giết, ý tôi là chúng ta sẽ tạo ra một lỗi để làm cho tập lệnh bị lỗi. Khi chúng tôi đang làm việc trên tập lệnh bot telegram, mỗi chức năng được tải riêng biệt, chúng tôi sẽ tạo một lỗi trong một chức năng mới và sử dụng nó để kiểm tra xem bot có khởi động lại thực sự hay không, hãy thêm phần này

dietpi@solidsnake:~/Temp$ python3 -m venv .env
6

Nếu bạn thử tập lệnh này [trong Môi trường ảo của bạn không phải là một dịch vụ], bạn sẽ thấy rằng tập lệnh sẽ trả về lệnh

# -*- coding: utf-8 -*-
import telebot

bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]

@bot.message_handler[commands=['help', 'aide']]
def send_welcome[message]:
    text = """
Help !
"""
    bot.reply_to[message, text]
    
bot.polling[]
3, nhưng nó sẽ đơn giản bị lỗi nếu bạn cố chạy
# -*- coding: utf-8 -*-
import telebot

bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]

@bot.message_handler[commands=['help', 'aide']]
def send_welcome[message]:
    text = """
Help !
"""
    bot.reply_to[message, text]
    
bot.polling[]
6 để in một biến
# -*- coding: utf-8 -*-
import telebot

bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]

@bot.message_handler[commands=['help', 'aide']]
def send_welcome[message]:
    text = """
Help !
"""
    bot.reply_to[message, text]
    
bot.polling[]
7 chưa từng có . Bởi vì python xem mỗi chức năng bot telegram là một chức năng riêng biệt, nên nó không kiểm tra xem tất cả các biến có tồn tại trước đó hay không, vì một biến có thể được xác định bằng một tin nhắn Telegram đến

  1. Triển khai [sao chép/dán] tập lệnh mới này trên Raspberry pi, sau đó khởi động lại RPi, để nó tải đúng cách dưới dạng dịch vụ systemd mới
  2. Đợi 30 giây, sau đó liên hệ với bot của bạn bằng cách sử dụng
    # -*- coding: utf-8 -*-
    import telebot
    
    bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]
    
    @bot.message_handler[commands=['help', 'aide']]
    def send_welcome[message]:
        text = """
    Help !
    """
        bot.reply_to[message, text]
        
    bot.polling[]
    3 để kiểm tra xem nó có trực tuyến không
  3. Sử dụng lệnh kill, bot sẽ chết, đợi hơn 10 giây một chút, vì chúng tôi đã đặt bộ hẹn giờ 10 giây trước khi bắt đầu tập lệnh
  4. Hãy thử lại
    # -*- coding: utf-8 -*-
    import telebot
    
    bot = telebot.TeleBot["725494896:AAFyUSf5e_QyYve0lmtr0AN7EcKvgy_aB-U"]
    
    @bot.message_handler[commands=['help', 'aide']]
    def send_welcome[message]:
        text = """
    Help !
    """
        bot.reply_to[message, text]
        
    bot.polling[]
    3, NÓ HOẠT ĐỘNG

Để xóa dịch vụ

dietpi@solidsnake:~/Temp$ python3 -m venv .env
00

sau đó khởi động lại

Freqtrade trên Dietpi

CẬP NHẬT [Tháng 3 năm 2020]

Mã freqtrade đã được cập nhật vào tháng 2 năm 2020 theo cách mà giờ đây freqtrade sẽ được chạy từ tệp

dietpi@solidsnake:~/Temp$ python3 -m venv .env
01 thay vì
dietpi@solidsnake:~/Temp$ python3 -m venv .env
02. Điều này có nghĩa là có sự khác biệt giữa tệp đang được chỉnh sửa trong video và tệp được chỉnh sửa trong tài liệu này. Phiên bản trình bày trong tài liệu này nên được sử dụng

Ngoài ra,

dietpi@solidsnake:~/Temp$ python3 -m venv .env
03 đã bị xóa khỏi freqtrade. Do đó, bạn sẽ gặp lỗi nếu cố chạy nó, thay vào đó hãy sử dụng
dietpi@solidsnake:~/Temp$ python3 -m venv .env
04

Chủ Đề