root ortamında açılışta uygulamayı başlattıktan sonra izleyiniz ve yeniden başlatmayı kapatması veya çökmesi halinde izleyiniz


0

Önyükleme tamamlanır tamamlanmaz python ile yazılmış bir uygulamayı nasıl başlatabileceğim konusunda bir sorum var. Bu uygulamanın tam izinlerle çalışması gerekir, böylece sudo ile çalışan iki komut olduğundan parola gerekmez.

Uygulamanın kapanması durumunda, aynı izinlerle uygulamayı yeniden başlatmak için de ihtiyacım var.

Benzer şeyler yaptım, ama hepsi bir arada değil. Örneğin, açılışta başlatmak için. İstediğim uygulamayı başka bir dizinde, init.d dizininde çağıran kısa bir komut dosyası atardım. Daha sonra "update-rc.d app default" yaparak, Ubuntu'nun başlangıç ​​komut dosyalarının bir parçası olarak otomatik olarak başlatılır.

başka bir basit betiği çökerse bir programı yeniden başlatmak için

#!/usr/bin/python
from subprocess import Popen
import sys

filename = sys.argv[1]
while True:
    print("\nStarting " + filename)
    p = Popen("python " + filename, shell=True)
    p.wait()

işi halleder. Uygulama adını dosya adına ekleyebilirim, böylece onu çağırdığımda argümanların bir parçası olarak vermek zorunda kalmam.

Benim asıl meselem çalıştırdığım uygulamanın root ortamında çalışması, açılışta otomatik başlatması ve kapanması durumunda yeniden başlatılması gerekiyor.

Herhangi bir öneri?


İstediğiniz gibi başlıyor
glenn jackman

start up systemd ile değiştirilmedi mi?
Michael

Her iki durumda da, kendi özel senaryonuzu yazmanız tercih edilir
glenn jackman

Yanıtlar:


0

Bu yüzden Glenn Jackman'dan bir öneri aldıktan sonra, başlangıç ​​/ sisteme bakmak için biraz daha zaman geçirmeye başladım. Sonunda sisteme baktım ve aradığım şeyin bir kaç yönünü buldum.

Endişelerden biri, şu ana kadar yazılımı kullandığım bazı satıcı yazılımlarının gerektirdiği gibi yazılımı kök ortamda çalıştırmam gerektiğiydi. Systemd ile bir servis kurduğunuzda, her şeyin root haklarıyla çalıştırıldığı anlaşılıyor. Bu benim sorunlarımdan biriyle ilgilendi.

Açılışta başlatılması ve yazılımın kapatılmasının yönetilmesiyle ilgili olarak, /lib/systemd/system/app.service adresinde bulunan çok basit bir ünite dosyası ile ele alınmıştır.

[Unit]
Description=this does something
WantedBy=multi-user.target

[Service]
exec executes my app
Restart
RestartSec

[Install]
wantedBy=multi-user.target

Sonra yeni servisi systemctl kullanarak etkinleştirdim.

sudo systemctl enable app.service
sudo systemctl daemon.reload
sudo systemctl start app.service

bu, açılışta fırlatmayı etkinleştirdi ve şu anda test etti.

Yine beni doğru yöne çeviren Glenn'e teşekkür ederim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.