2013-02-28 27 views
7

Czy mogę to zrobić Poniższa usługa uruchamiania poniżej, nie ma błędów pokazujących po uruchomieniu, ale poniższy skrypt serwera nie działa!skrypt startowy linux w systemd

ln /lib/systemd/aquarium.service aquarium.service 
systemctl daemon-reload 
systemctl enable aquarium.service 
systemctl start aquarium.service 

dzięki

aquarium.service:

[Unit] 
Description=Start aquarium server 

[Service] 
WorkingDirectory=/home/root/python/code/aquarium/ 
ExecStart=/bin/bash server.* start 
KillMode=process 

[Install] 
WantedBy=multi-user.target 

tutaj jest skrypt server.sh

#!/bin/bash 

PID="" 

function get_pid { 
    PID=`pidof python ./udpthread.py` 
} 

function stop { 
    get_pid 
    if [ -z $PID ]; then 
     echo "server is not running." 
     exit 1 
    else 
     echo -n "Stopping server.." 
     kill -9 $PID 
     sleep 1 
     echo ".. Done." 
    fi 
} 


function start { 
    get_pid 
    if [ -z $PID ]; then 
     echo "Starting server.." 
     ./udpthread.py & 
     get_pid 
     echo "Done. PID=$PID" 
    else 
     echo "server is already running, PID=$PID" 
    fi 
} 

function restart { 
    echo "Restarting server.." 
    get_pid 
    if [ -z $PID ]; then 
     start 
    else 
     stop 
     sleep 5 
     start 
    fi 
} 


function status { 
    get_pid 
    if [ -z $PID ]; then 
     echo "Server is not running." 
     exit 1 
    else 
     echo "Server is running, PID=$PID" 
    fi 
} 

case "$1" in 
    start) 
     start 
    ;; 
    stop) 
     stop 
    ;; 
    restart) 
     restart 
    ;; 
    status) 
     status 
    ;; 
    *) 
     echo "Usage: $0 {start|stop|restart|status}" 
esac 
+0

Bardziej szczegółowa i kompletna odpowiedź: http://unix.stackexchange.com/a/47715 –

Odpowiedz

17

spróbować użyć "type =" rozwidlone i wykorzystania pełna nazwa pliku.

[Unit] 
Description=Start aquarium server 

[Service] 
WorkingDirectory=/home/root/python/code/aquarium/ 
Type=forking 
ExecStart=/bin/bash server.sh start 
KillMode=process 

[Install] 
WantedBy=multi-user.target 

jeśli to nie działa, po wyjście z tej komendy:

# journalctl -u aquarium.service 
+0

Dzięki za które , jednak dostaję to, gdy używam dokładnego skryptu, który tam wpisałeś. wiem, że/bin/bash server.sh start uruchamia skrypt! beaglebone: ~ # systemctl status aquarium.service aquarium.service - Uruchom serwer akwariowy Załadowany: załadowany (/etc/systemd/system/aquarium.service; włączony) Aktywny: nieudany (Wynik: kod wyjścia) od Pt, 01 Mar 2013 18:18:26 +1100; 23s temu Proces: 12545 ExecStart =/bin/bash server.sh start (kod = zakończony, status = 200/CHDIR) Główny PID: 12482 (kod = zakończony, status = 200/CHDIR) CGrupa: nazwa = systemd: /system/aquarium.service – Ossama

+0

Zapomniałem dodać ten Mar 01 18:18:26 beaglebone (bash) [12545]: Błąd w kroku CHDIR spawning/bin/bash: Brak takiego pliku lub katalogu – Ossama

+0

hmm, jakiego systemu używasz ? Na ArchLinux te pliki są dowiązania symboliczne: '% ls -l/bin/sh/bin/bash lrwxrwxrwx 1 root root 15 styczeń 26 21:19/bin/bash -> ../usr/bin/bash * lrwxrwxrwx 1 root root 15 sty 26 21:19/bin/sh -> ../ usr/bin/bash * ' Spróbuj zastąpić"/bin/bash "przez"/bin/sh "i upewnij się, że pliki istnieją za pomocą "ls -l" –