Bir USB aygıtından girişi kodlayan ve bir php komut dosyasına komut gönderen bir python betiğim var. Komut konsoldan çalıştırıldığında güzel çalışır, ancak başlangıçta çalıştırılmaya ihtiyacım var.systemd'den kalıcı bir python betiği çalıştıran?
systemctl start service-name
işleminin beni hiçbir zaman komut istemine döndürmemesi dışında iyi çalıştığını düşündüğüm betiği başlatmak için bir systemd hizmeti oluşturdum. Çalışırken, giriş cihazıyla tam olarak beklendiği gibi etkileşim kurabilirim. Ancak, ctr-z ile systemctl start
işleminden çıkılırsa, komut dosyası yalnızca birkaç saniye boyunca çalışmaya devam eder. İşte
[Unit]
After=default.target
[Service]
ExecStart=/usr/bin/python /root/pidora-keyboard.py
[Install]
WantedBy=default.target
ve burada benim python komut dosyası: Ben böylece hizmet dosyasından uyumsuz çalıştırmak script yapabilirim nasıl
#!/usr/bin/env python
import json, random
from evdev import InputDevice, categorize, ecodes
from urllib.request import urlopen
dev = InputDevice('/dev/input/event2')
def sendCommand(c):
return json.loads(urlopen("http://127.0.0.1/api.php?command="+c).read().decode("utf-8"))
def getRandomStation():
list = sendCommand('stationList')
list = list['stations']
index = random.randint(0, (len(list)-1))
print(list[index]['id'] + " - " + list[index]['name'])
sendCommand('s' + list[index]['id'])
print(dev)
for event in dev.read_loop():
if event.type == ecodes.EV_KEY:
key_pressed = str(categorize(event))
if ', down' in key_pressed:
print(key_pressed)
if 'KEY_PLAYPAUSE' in key_pressed:
print('play')
sendCommand('p')
if 'KEY_FASTFORWARD' in key_pressed:
print('fastforward')
sendCommand('n')
if 'KEY_NEXTSONG' in key_pressed:
print('skip')
sendCommand('n')
if 'KEY_POWER' in key_pressed:
print('power')
sendCommand('q')
if 'KEY_VOLUMEUP' in key_pressed:
print('volume up')
sendCommand('v%2b')
if 'KEY_VOLUMEDOWN' in key_pressed:
print('volume down')
sendCommand('v-')
if 'KEY_CONFIG' in key_pressed:
print('Random Station')
getRandomStation()
start komutu tamamlanabilir ve betik arka planda çalışmaya devam edebilir mi?
Eğer 'ExecStart' satırınızın sonuna bir '&' eklediyseniz ne olur? Bu betiğin arka planda çalıştırılmasını zorlamaz mı? [Örneğin] (http://bashitout.com/2013/05/18/Ampersands-on-the-command-line.html). – wflynny
@Bill, şu anda 'ExecStart =/usr/bin/python /root/pidora-keyboard.py &>/dev/null & 'öğesinin aşırı sürümünü denedi ve yine de kilitleniyor ve eğer onu öldürürsem alt işlem Birkaç saniye sonra öldürüldü. –
'[Service]' altındaki 'Type = forking' nedir? Bunu yaparsanız, muhtemelen '& 'de kaldırmalısınız. – wflynny