NEWS
[gelöst] Befehl als root ausführen oder Rechte ändern?
-
Also in Zeile 51 steht folgendes:
kill
get_pid
Das komische ist, wenn ich das z.B. über ssh dem user pi oder auch iobroker spielt keine Rolle, ausführe mit sudo dann kann ich das restarten. Es geht also nur um dieses sudo warum auch immer. Eine Lösung wäre, wenn iobroker sudo zulassen würde.
-
#!/bin/sh ### BEGIN INIT INFO # Provides: # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start daemon at boot time # Description: Enable service provided by daemon. ### END INIT INFO dir="/home/pi/npm/zwiftapp" cmd="node heartrate_power_mqtt_V2.js" user="iobroker" name=`basename $0` pid_file="/var/run/$name.pid" stdout_log="/var/log/$name.log" stderr_log="/var/log/$name.err" get_pid() { cat "$pid_file" } is_running() { [ -f "$pid_file" ] && ps -p `get_pid` > /dev/null 2>&1 } case "$1" in start) if is_running; then echo "Already started" else echo "Starting $name" cd "$dir" if [ -z "$user" ]; then sudo $cmd >> "$stdout_log" 2>> "$stderr_log" & else sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" & fi echo $! > "$pid_file" if ! is_running; then echo "Unable to start, see $stdout_log and $stderr_log" exit 1 fi fi ;; stop) if is_running; then echo -n "Stopping $name.." kill `get_pid` for i in 1 2 3 4 5 6 7 8 9 10 # for i in `seq 10` do if ! is_running; then break fi echo -n "." sleep 1 done echo if is_running; then echo "Not stopped; may still be shutting down or shutdown may have failed" exit 1 else echo "Stopped" if [ -f "$pid_file" ]; then rm "$pid_file" fi fi else echo "Not running" fi ;; restart) $0 stop if is_running; then echo "Unable to stop, will not attempt to start" exit 1 fi $0 start ;; status) if is_running; then echo "Running" else echo "Stopped" exit 1 fi ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0
-
@waterchill sagte in Befehl als root ausführen oder Rechte ändern?:
kill get_pid
was sind denn das für komische Anführungszeichen im Skript?
ist es wirklich das ` und nicht das ' ?? -
schaut alles nach ` aus
Wie gesagt das Skript an sich funktioniert, ich kann es leider nicht wegen dem "sudo" von iobroker aus steuern.
-
@waterchill sagte in Befehl als root ausführen oder Rechte ändern?:
schaut alles nach ` aus
und das ist IMHO falsch
-
Dann würde das Skript doch gar nicht laufen. Zum Verständnis nochmal:
homebridge@raspberrypi:/var/homebridge $ /etc/init.d/power_mqtt restart Stopping power_mqtt../etc/init.d/power_mqtt: Zeile 51: kill: (17305) - Die Operation ist nicht erlaubt .......... Not stopped; may still be shutting down or shutdown may have failed Unable to stop, will not attempt to start homebridge@raspberrypi:/var/homebridge $ sudo /etc/init.d/power_mqtt restart Stopping power_mqtt.. Stopped Starting power_mqtt homebridge@raspberrypi:/var/homebridge $
-
@waterchill sagte in Befehl als root ausführen oder Rechte ändern?:
Zum Verständnis nochmal:
dann änder doch mal
kill `get_pid`
inkill 'get_pid'
Der Fehler kann sich auch auf den Bereich nach demkill
beziehen, weil der gesamte Befehl so nicht zulässig ist -
pi@raspberrypi:/etc/init.d $ sudo ./power_mqtt restart Stopping power_mqtt.../power_mqtt: Zeile 51: kill: get_pid: Die Argumente m?ssen Prozess- oder Jobbezeichnungen sein. .......... Not stopped; may still be shutting down or shutdown may have failed Unable to stop, will not attempt to start pi@raspberrypi:/etc/init.d $
@waterchill sagte in Befehl als root ausführen oder Rechte ändern?:
kill: get_pid: Die Argumente m?ssen Prozess- oder Jobbezeichnungen sein.
ich sehe da keine Anführungszeichen
Mit dem Rest der Fehlermeldung stimme ich überein.ist denn 'get_pid' ein Job?
-
@homoran @waterchill Mit
get_pid
wird wohl die Funktion in Zeile 21 aufgerufen. Das selbe passiert in Zeile 26. Ich bin jetzt auch nicht so der bash-Spezialist, aber braucht man da überhaupt Apostrophe? -
@dr-bakterius sagte in Befehl als root ausführen oder Rechte ändern?:
aber braucht man da überhaupt Apostrophe?
da bin ich auch nicht so fit und das wäre meine nächste Frage gewesen, aber er meckert ja auch ohne sie
-
Ich habe das Skript nicht geschrieben. Wer sich die ANleitung durchlesen will, die gibt es hier:
https://infinityflow.ch/raspberry-pi-ant/#comment-1651
Wie gesagt das ganze funktioniert ja auch, ich möchte eben nur das Skript zu einer bestimmten Zeit ausführen lassen. Das ist im Prinzip alles.
-
@waterchill sagte in Befehl als root ausführen oder Rechte ändern?:
Ich habe das Skript nicht geschrieben. Wer sich die ANleitung durchlesen will, die gibt es hier:
finde da das Skript gar nicht erst
-
@waterchill sagte in Befehl als root ausführen oder Rechte ändern?:
ich möchte eben nur das Skript zu einer bestimmten Zeit ausführen lassen.
Und warum dann über ioBroker und nicht per cron?
-
@homoran sagte in Befehl als root ausführen oder Rechte ändern?:
und das ist IMHO falsch
für dich zum Lernen
root@iobroker:/opt/iobroker# export test=/bin/bash root@iobroker:/opt/iobroker# echo basename $test basename /bin/bash root@iobroker:/opt/iobroker# echo 'basename $test' basename $test root@iobroker:/opt/iobroker# echo `basename $test` bash root@iobroker:/opt/iobroker#
-
@fastfoot sagte in Befehl als root ausführen oder Rechte ändern?:
für dich zum Lernen
Danke!
aber das mit dem kill wäre dann:
pi@raspberrypi:/opt/iobroker $ echo basename `test` basename
-
Bin ich grad dabei. Müsste dann so passen oder?
*/2 16-20 * * * sudo /etc/init.d/power_mqtt restart
Jede zweite Minute von 16-20 Uhr täglich
-
was macxht dieses script überhaupt ? installiert das ein bash script als service ? oder lieg ich da falsch
-
@homoran sagte in Befehl als root ausführen oder Rechte ändern?:
aber das mit dem kill wäre dann:
das was zwischen den ticks steht wird ausgeführt und das Ergebnis zurückgegeben. es wird also get_pid ausgeführt und gibt eine PID zurück. Die wird dann gekillt
-
@fastfoot aber dieses kill wird mit iobroker ausgeführt (wurde ja so bestimmt im script unter user) - der darf doch das nicht - da müßte kill in die sudoers datei für iobroker ?
-
@waterchill der Ansatz mit sudoers war ja gar nicht so schlecht. Kannst du mal das Ergebnis von
cat /etc/sudoers.d/iobroker
posten?