2013-02-28 10 views
7

Posso fare questo servizio di avvio di seguito, non ci sono errori che mostrano una volta eseguito, ma lo script del server sottostante non viene eseguito!linux start up script in systemd

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

grazie

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 

Ecco lo script 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

Una risposta più dettagliata e completa: http://unix.stackexchange.com/a/47715 –

risposta

17

Prova utilizzando "Type = fork" e l'uso nome file completo.

[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 

se non funziona, uscita post di questo comando:

# journalctl -u aquarium.service 
+0

Grazie per questo , tuttavia ottengo questo quando uso lo script esatto che hai digitato lì. sappi che/bin/bash server.sh start avvia lo script !! beaglebone: ~ # systemctl status aquarium.service aquarium.service - Avvia server acquario Caricato: caricato (/etc/systemd/system/aquarium.service; abilitato) Attivo: non riuscito (risultato: codice uscita) da Ven, 01 Mar 2013 18:18:26 +1100; 23s ago Processo: 12545 ExecStart =/bin/bash server.sh start (codice = chiuso, stato = 200/CHDIR) PID principale: 12482 (codice = chiuso, stato = 200/CHDIR) CGroup: nome = systemd: /system/aquarium.service – Ossama

+0

Ho dimenticato di aggiungere questo Mar 01 18:18:26 beaglebone (bash) [12545]: Fallito al passaggio CHDIR spawning/bin/bash: nessun file o directory – Ossama

+0

hmm, quale sistema stai usando ? su Archlinux questo file sono link simbolici: '% ls -l/bin/sh/bin/bash lrwxrwxrwx 1 root root 15 gennaio 26 21:19/bin/bash -> ../usr/bin/bash * lrwxrwxrwx 1 root root 15 gen 26 21:19/bin/sh -> ../ usr/bin/bash * ' Prova a sostituire"/bin/bash "con"/bin/sh "e assicurati che i file esistono usando "ls -l" –