Hallo alle miteinander,
ich hoffe erstmal, dass ich mit meiner Frage in diesem Unterordner richtig bin.
Zurzeit entwickel ich ein C-Programm für den Raspberry Pi mit Jessie als OS. Das Programm wird mittels Cross-Compile auf den Raspberry geladen und dadurch bekomme ich dann eine ausführbare .out Datei. Meine Frage ist jetzt, wie ich mein Programm systemweit verfügbar machen kann wie es z.B. bei apache der Fall ist???
Bisher habe ich ein Skript in /etc/init.d erstellt, allerdings funktioniert das nicht so wirklich...
Spoiler anzeigen
#!/bin/sh
### BEGIN INIT INFO
# Provides: can_converter
# Required-Start: $local_fs $network $named $time $syslog
# Required-Stop: $local_fs $network $named $time $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Convert network packets into lin and can
### END INIT INFO
SCRIPT="./home/pi/projects/can_converter/bin/ARM/Debug/can_converter.out -u 60000 -t 60000 -s 60005 -d 60001 -f -v"
RUNAS=pi
PIDFILE=/var/run/can_converter.pid
LOGFILE=/var/log/can_converter.log
start() {
if [ -f $PIDFILE ] && [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE); then
echo 'Service already running' >&2
return 1
fi
echo 'Starting service…' >&2
local CMD="$SCRIPT > \"$LOGFILE\" & echo \$!"
sudo "$CMD" > "$PIDFILE"
# Try with this command line instead of above if not workable
# su -s /bin/sh $RUNAS -c "$CMD" > "$PIDFILE"
sleep 2
PID=$(cat $PIDFILE)
if pgrep -u $RUNAS -f $NAME > /dev/null
then
echo "$NAME is now running, the PID is $PID"
else
echo ''
echo "Error! Could not start $NAME!"
fi
}
stop() {
if [ ! -f "$PIDFILE" ] ! kill -0 $(cat "$PIDFILE"); then
echo 'Service not running' >&2
return 1
fi
echo 'Stopping service…' >&2
kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
echo 'Service stopped' >&2
}
uninstall() {
echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] "
local SURE
read SURE
if [ "$SURE" = "yes" ]; then
stop
rm -f "$PIDFILE"
echo "Notice: log file was not removed: $LOGFILE" >&2
update-rc.d -f $NAME remove
rm -fv "$0"
fi
}
status() {
printf "%-50s" "Checking <NAME>..."
if [ -f $PIDFILE ] && [ -s $PIDFILE ]; then
PID=$(cat $PIDFILE)
if [ -z "$(ps axf | grep ${PID} | grep -v grep)" ]; then
printf "%s\n" "The process appears to be dead but pidfile still exists"
else
echo "Running, the PID is $PID"
fi
else
printf "%s\n" "Service not running"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
uninstall)
uninstall
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|status|restart|uninstall}"
esac
Ich habe dafür das Besipiel hier verwendet und ein wenig angepasst.
Kann es vielleicht sein, dass ich aus meinem Programm noch ein Daemon oder so machen muss???
Es wäre echt super wenn mir einer helfen könnte!
MfG