Điểm:2

Làm cách nào để tạo dịch vụ python 3 sử dụng ổ cắm với systemd?

lá cờ us

Tôi đang cố gắng tạo một dịch vụ với systemd, nơi tôi sử dụng python3 để tạo một ổ cắm đơn giản và để nó dưới dạng daemon, nhưng tôi đã thực hiện một số lần nhưng trong cả hai trường hợp đều không thành công.Hôm nay systemd đã đánh bại tôi, nhưng ngày mai là một ngày khác để thử.

Người phục vụ

ổ cắm nhập khẩu 
máy chủ = '127.0.0.1'
cổng = 9999
BUFFER_SIZE = 1024 

với socket.socket(socket.AF_INET, socket.SOCK_STREAM) dưới dạng socket_tcp:
    socket_tcp.bind((máy chủ, cổng)) 
    socket_tcp.listen(5) # Esperamos la conexión del cliente 
    conn, addr = socket_tcp.accept() # Establecemos la conexión con el cliente 
    với kết nối:
        print('[*] Conexión establecida') 
        trong khi Đúng:
            # Recibimos bytes, convertimos en str
            dữ liệu = conn.recv(BUFFER_SIZE)
            # Verificamos que hemos recibido datos
            nếu không phải là dữ liệu:
                nghỉ
            khác:
                print('[*] Datos recibidos: {}'.format(data.decode('utf-8'))) 
            conn.send(data) # Hacemos echo convirtiendo de nuevo a bytes

Khách hàng

ổ cắm nhập khẩu
# Khách hàng được đề nghị là người phục vụ đặc biệt
máy chủ = '127.0.0.1'
cổng = 9999

BUFFER_SIZE = 1024 MESSAGE = 'Hola, thế giới!' # Dữ liệu mà queremos ghen tị với socket.socket(socket.AF_INET, socket.SOCK_STREAM) dưới dạng socket_tcp:
    socket_tcp.connect((máy chủ, cổng))
    # Convertimos str một byte
    socket_tcp.send(MESSAGE.encode('utf-8'))
    dữ liệu = socket_tcp.recv(BUFFER_SIZE)

Tệp đơn vị cấu hình

sudo nano /etc/systemd/system/socket_prueba.service
sudo rm -r /etc/systemd/system/socket_prueba.service
[Đơn vị]
Mô tả= Hệ thống chuyển tiếp máy chủ: Người quản lý
Sau=multi-user.target

[Dịch vụ]
Loại = đơn giản
Khởi động lại = luôn luôn
ExecStart=/usr/local/bin/pipenv chạy python /path/test_server.py

[Cài đặt]
WantedBy=multi-user.target

Sudo systemctl daemon-tải lại
Sudo systemctl enable socket_prueba.service
Sudo systemctl start socket_prueba.service
Sudo systemctl status socket_prueba.service

Kết quả:

â socket_prueba.service - Hệ thống chuyển tiếp máy chủ: Người quản lý
     Đã tải: đã tải (/etc/systemd/system/socket_prueba.service; đã bật; cài đặt sẵn của nhà cung cấp: đã bật)
     Hoạt động: không thành công (Kết quả: mã thoát) kể từ Thứ Bảy 2021-09-25 16:07:17 -05; 58 phút trước
    Quá trình: 25771 ExecStart=/usr/local/bin/pipenv chạy python 

/nhà/đường dẫn>
   PID chính: 25771 (mã=đã thoát, trạng thái=2)

ngày 25 tháng 9 16:07:17 serveraas systemd[1]: socket_prueba.service: Công việc khởi động lại theo lịch trình, bộ đếm khởi động lại là >
ngày 25 tháng 9 16:07:17 serveraas systemd[1]: Hệ thống chuyển tiếp máy chủ đã dừng: Người quản lý.
ngày 25 tháng 9 16:07:17 serveraas systemd[1]: socket_prueba.service: Bắt đầu yêu cầu lặp lại quá nhanh.
ngày 25 tháng 9 16:07:17 serveraas systemd[1]: socket_prueba.service: Không thành công với kết quả là 'mã thoát'.
ngày 25 tháng 9 16:07:17 serveraas systemd[1]: Không thể khởi động Hệ thống Chuyển tiếp Máy chủ: Người quản lý.

ý định 2 Nguồn: hệ thống và trăn

socket con python y systemd

â socket_prueba.socket - Ổ cắm prueba
     Đã tải: đã tải (/etc/systemd/system/socket_prueba.socket; đã tắt; giá trị đặt sẵn của nhà cung cấp: đã bật)
     Hoạt động: không thành công (Kết quả: dịch vụ-bắt đầu-giới hạn-hit) kể từ Thứ Bảy 2021-09-25 17:00:47 -05; 4 giây trước
   Trình kích hoạt: â socket_prueba.service
     Nghe: 127.0.0.1:9999 (Luồng)

ngày 25 tháng 9 17:00:47 vidm-OMEN systemd[1]: Nghe trên Socket prueba.
ngày 25 tháng 9 17:00:47 vidm-OMEN systemd[1]: socket_prueba.socket: Không thành công với kết quả 'service-start-limit-hit'.
Michael Hampton avatar
lá cờ cz
Kiểm tra tạp chí để tìm hiểu những gì đã xảy ra, ví dụ: `journalctl -l -u socket_prueba.service`
Điểm:3
lá cờ us

Ở đây sẵn sàng thực hiện các lệnh triển khai shell đơn giản cho trường hợp của bạn, bạn có thể thay đổi thư mục, tên, mô tả dịch vụ hoặc tập lệnh, v.v., mô tả bên dưới:

Tự tạo thư mục và tập lệnh

mkdir /usr/src/python-socket -p

con mèo > /usr/src/python-socket/python-socket.py << 'EOL'
ổ cắm nhập khẩu 
máy chủ = '127.0.0.1'
cổng = 9999
BUFFER_SIZE = 1024 

với socket.socket(socket.AF_INET, socket.SOCK_STREAM) dưới dạng socket_tcp:
    socket_tcp.bind((máy chủ, cổng)) 
    socket_tcp.listen(5) # Esperamos la conexión del cliente 
    conn, addr = socket_tcp.accept() # Establecemos la conexión con el cliente 
    với kết nối:
        print('[*] Conexión establecida') 
        trong khi Đúng:
            # Recibimos bytes, convertimos en str
            dữ liệu = conn.recv(BUFFER_SIZE)
            # Verificamos que hemos recibido datos
            nếu không phải là dữ liệu:
                nghỉ
            khác:
                print('[*] Datos recibidos: {}'.format(data.decode('utf-8'))) 
            conn.send(data) # Hacemos echo convirtiendo de nuevo a bytes
EOL

Thiết lập các biến để tạo dịch vụ systemd

SERVICE_NAME=python-socket
SERVICE_DESCRIPTION="Thử nghiệm dịch vụ python"
SERVICE_COMMAND="/usr/bin/python3 /usr/src/python-socket/python-socket.py"
SERVICE_WORK_DIR=/usr/src/python-socket/
SERVICE_USER=gốc

Triển khai cấu hình dịch vụ systemd

mèo > /etc/systemd/system/${SERVICE_NAME}.service << EOL
[Đơn vị]
Mô tả=${SERVICE_DESCRIPTION}
Sau=multi-user.target

[Dịch vụ]
Môi trường = "TỪ = HỆ THỐNG"
WorkingDirectory=${SERVICE_WORK_DIR}
Loại = đơn giản
Người dùng=${SERVICE_USER}
ExecStart=${SERVICE_COMMAND}
RemainafterExit=no
Khởi động lại = luôn luôn
Khởi động lạiSec=2
StartLimitBurst=999999
StartLimitInterval=0
KillMode=tiến trình

[Cài đặt]
WantedBy=multi-user.target
EOL

Áp dụng dịch vụ mới, bắt đầu và kiểm tra

systemctl daemon-tải lại
bật systemctl ${SERVICE_NAME}
systemctl dừng ${SERVICE_NAME}
bắt đầu systemctl ${SERVICE_NAME}
trạng thái systemctl ${SERVICE_NAME}

Kết quả là cấu hình dịch vụ systemd của bạn sẽ giống như

[Đơn vị]
Mô tả=Thử nghiệm dịch vụ python
Sau=multi-user.target

[Dịch vụ]
Môi trường = "TỪ = HỆ THỐNG"
WorkingDirectory=/usr/src/python-socket/
Loại = đơn giản
Người dùng = root
ExecStart=/usr/bin/python3 /usr/src/python-socket/python-socket.py
RemainafterExit=no
Khởi động lại = luôn luôn
Khởi động lạiSec=2
StartLimitBurst=999999
StartLimitInterval=0
KillMode=tiến trình

[Cài đặt]
WantedBy=multi-user.target

Ở đâu:

Môi trường = "TỪ = HỆ THỐNG" - một số biến env nếu bạn muốn chuyển đến tập lệnh python của mình

Loại = đơn giản - dịch vụ systemd đơn giản, nó sẽ hoạt động trong khi tập lệnh đang hoạt động

RemainafterExit=no
Khởi động lại = luôn luôn
Khởi động lạiSec=2
StartLimitBurst=999999
StartLimitInterval=0

Các tham số này sẽ không cho phép tập lệnh của bạn ngừng hoạt động trong bất kỳ điều kiện nào, nó sẽ bắt đầu thất bại liên tục

KillMode=tiến trình - Đây là cách tập lệnh của bạn sẽ dừng, nếu bạn không có các sự kiện SIG đặc biệt trong tập lệnh python của mình thì đó là phổ biến

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.