NEWS
[gelöst] Befehl als root ausführen oder Rechte ändern?
-
Moin,
ich kämpfe seit heute heute früh mit einem Problem. Ich möchte folgenden Befehl über blockly ausführen:
/etc/init.d/power_mqtt restart
Das Problem ist, der Befehl geht nur über sudo und sudo ist im Terminal nicht möglich. Habe folgendes versucht über ssh KOnsole des users pi:
sudo chmod -v 777 power_mqtt
-> kein Erfolg
dann:
sudo chown iobroker power_mqtt
-> kein Erfolg
dann:
sudo visudo /etc/sudoers
dort entsprechend eingetragen:
iobroker ALL= /etc/init.d/power_mqtt
-> kein Erfolg
Nun bin ich mit meinem Wissen am Ende. Hat jemand einen Tipp?
-
-
sieht folgendermassen aus:
pi@raspberrypi:/etc/init.d $ getfacl /etc/init.d/power_mqtt getfacl: Entferne f?hrende '/' von absoluten Pfadnamen # file: etc/init.d/power_mqtt # owner: iobroker # group: iobroker user::rwx group::rwx other::rwx
MOD-Edit: Code in code-tags gesetzt!
Ich habe dieses Skript power_mqtt nicht selber geschrieben. Den Inhalt gibt es hier. Man soll in der Zeile user="root" eintragen. Ich habe das auch in user="iobroker" geändert aber auch ohne Erfolg.
https://raw.githubusercontent.com/fhd/init-script-template/master/template
Die Fehlermeldung sieht dann so aus:
/opt/iobroker$ /etc/init.d/power_mqtt restart Stopping power_mqtt.. /etc/init.d/power_mqtt: Zeile 51: kill: (426) - Die Operation ist nicht erlaubt
MOD-Edit: Code in code-tags gesetzt!
-
Das skript wird also schon ausgeführt, allerdings gibt es dann in Zeile 51 'Problem' mit der Ausführung von 'kill'. Das darf natürlich so ohne weiteres nicht ein Wald-und-Wiesen-User machen.
Was wird denn in Zeile 51 genau gekillt?
-
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