Điểm:1

systemd giết phiên ngrok của tôi bắt đầu từ python

lá cờ in

Tôi có một kịch bản tôi đã viết để nghe trên mqtt. Khi một số mã nhất định đến máy chủ mqtt thì phiên ngrok sẽ được bắt đầu như sau:

sub process.Popen(['/tmp/ngrok','http' ,'8080'], stdout=sub process.DEVNULL, stderr=sub process.DEVNULL)

scrupt chạy trong virtualenv và ở đó có tập lệnh shell để kích hoạt env ảo và chạy nó:

#!/bin/bash
. ./venv/bin/kích hoạt
python mqtt_listener.py

Khi chạy tập lệnh này trong trình bao của tôi với & cuối cùng, phiên ngrok sẽ mở và để mở nicl cho đến khi tôi tự hủy nó. Tuy nhiên, khi chạy trong systemd bằng tệp hệ thống sau (tệp người dùng) /home/myuser/.config/systemd/user/mqtt_listener.service

[Đơn vị]
Mô tả=dịch vụ chạy mqtt
Sau=default.target

[Dịch vụ]
Loại = thực thi
ExecStart=/home/myuser/mqtt_listener/run_mqtt_service.sh
KillMode=tiến trình

[Cài đặt]
WantedBy=default.target

khi dịch vụ nhận được lệnh mqtt, tôi có thể xem nhật ký nhật ký, dịch vụ đã nhận được tin nhắn của tôi và rẽ nhánh, đó là quy trình ngrok, nhưng sau đó tôi có thể thấy

dịch vụ đã được "tắt kích hoạt thành công" và sau đó khởi động lại. điều kỳ lạ là nó luôn xảy ra khi tôi không đăng nhập bằng ssh vào máy chủ, nếu tôi đăng nhập thì quá trình này sẽ không chết. Bất cứ ý tưởng những gì tôi đang làm sai? type=exec là do thực tế là những cái khác không phù hợp. Tôi không thể hiểu tại sao systemd coi dịch vụ python của tôi đã hoàn thành và do đó giết nó sau một nhánh rẽ cháu (ngã ba đầu tiên là tập lệnh chạy, tập lệnh này tôi có thể thoát khỏi).

Điểm:1
lá cờ cz

Theo mặc định, dịch vụ người dùng không chạy nếu người dùng chưa đăng nhập.

Bạn có thể cho phép người dùng chạy dịch vụ khi chưa đăng nhập bằng cách bật kéo dài cho tài khoản của người dùng đó, tức là:

Sudo loginctl enable-linger <tên người dùng>

Sau khi kích hoạt kéo dài, các dịch vụ người dùng sẽ chạy trong khi người dùng chưa đăng nhập và cũng có thể được kích hoạt để bắt đầu khi khởi động.

codeScriber avatar
lá cờ in
thực sự bạn đã đúng! Lần đầu tiên tôi sử dụng dịch vụ người dùng systemd và đã được sử dụng như vậy vì lý do bảo mật, chắc chắn điều đó đã giải quyết được, cảm ơ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.