Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. [gelöst] Befehl als root ausführen oder Rechte ändern?

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [gelöst] Befehl als root ausführen oder Rechte ändern?

    This topic has been deleted. Only users with topic management privileges can see it.
    • W
      waterchill last edited by waterchill

      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?

      Thomas Braun OliverIO 2 Replies Last reply Reply Quote 0
      • Thomas Braun
        Thomas Braun Most Active @waterchill last edited by Thomas Braun

        @waterchill

        Wie sehen die Rechte an der Datei aus?

        getfacl /etc/init.d/power_mqtt
        
        W 1 Reply Last reply Reply Quote 0
        • W
          waterchill @Thomas Braun last edited by Homoran

          @thomas-braun

          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!

          Thomas Braun 1 Reply Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @waterchill last edited by Thomas Braun

            @waterchill

            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?

            W 2 Replies Last reply Reply Quote 0
            • W
              waterchill @Thomas Braun last edited by

              @thomas-braun

              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.

              Homoran 1 Reply Last reply Reply Quote 0
              • W
                waterchill @Thomas Braun last edited by waterchill

                @thomas-braun

                #!/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
                
                1 Reply Last reply Reply Quote 0
                • Homoran
                  Homoran Global Moderator Administrators @waterchill last edited by Homoran

                  @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 ' ??

                  W 1 Reply Last reply Reply Quote 0
                  • W
                    waterchill @Homoran last edited by

                    @homoran

                    schaut alles nach ` aus

                    Wie gesagt das Skript an sich funktioniert, ich kann es leider nicht wegen dem "sudo" von iobroker aus steuern.

                    Homoran 1 Reply Last reply Reply Quote 0
                    • Homoran
                      Homoran Global Moderator Administrators @waterchill last edited by

                      @waterchill sagte in Befehl als root ausführen oder Rechte ändern?:

                      schaut alles nach ` aus

                      und das ist IMHO falsch

                      W F 2 Replies Last reply Reply Quote 0
                      • W
                        waterchill @Homoran last edited by

                        @homoran

                        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 $ 
                        
                        Homoran 1 Reply Last reply Reply Quote 0
                        • Homoran
                          Homoran Global Moderator Administrators @waterchill last edited by

                          @waterchill sagte in Befehl als root ausführen oder Rechte ändern?:

                          Zum Verständnis nochmal:

                          dann änder doch mal kill `get_pid` in kill 'get_pid'
                          Der Fehler kann sich auch auf den Bereich nach dem kill beziehen, weil der gesamte Befehl so nicht zulässig ist

                          W Dr. Bakterius 2 Replies Last reply Reply Quote 0
                          • W
                            waterchill @Homoran last edited by Homoran

                            @homoran

                            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?

                            1 Reply Last reply Reply Quote 0
                            • Dr. Bakterius
                              Dr. Bakterius Most Active @Homoran last edited by

                              @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?

                              Homoran W 2 Replies Last reply Reply Quote 0
                              • Homoran
                                Homoran Global Moderator Administrators @Dr. Bakterius last edited by

                                @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

                                1 Reply Last reply Reply Quote 0
                                • W
                                  waterchill @Dr. Bakterius last edited by

                                  @dr-bakterius

                                  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.

                                  Homoran Dr. Bakterius 2 Replies Last reply Reply Quote 0
                                  • Homoran
                                    Homoran Global Moderator Administrators @waterchill last edited by

                                    @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

                                    1 Reply Last reply Reply Quote 0
                                    • Dr. Bakterius
                                      Dr. Bakterius Most Active @waterchill last edited by

                                      @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?

                                      W 1 Reply Last reply Reply Quote 0
                                      • F
                                        fastfoot @Homoran last edited by

                                        @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#              
                                        
                                        Homoran 1 Reply Last reply Reply Quote 1
                                        • Homoran
                                          Homoran Global Moderator Administrators @fastfoot last edited by Homoran

                                          @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
                                          
                                          F 1 Reply Last reply Reply Quote 0
                                          • W
                                            waterchill @Dr. Bakterius last edited by

                                            @dr-bakterius

                                            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

                                            F Dr. Bakterius 2 Replies Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            980
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            7
                                            49
                                            3811
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo