Wpis z mikrobloga

Mirki z #domoticz i #raspberrypi może ktoś pomoże: jaka jest różnica (w użytkowniku i jego uprawnieniach zwłaszcza) między skryptem uruchamianym wprost z linii poleceń raspbiana (jako user: pi, bez sudo), a tym samym skryptem uruchamianym jako "on action" spod przycisku w Domoticzu? Bo pierwsza opcja działa, druga opcja jest pokazana w logu domoticza jako wykonana, ale nie działa.

Teraz dłuższa historia: jest program w pythonie, który po uruchomieniu ma sobie "pogadać" z zewnętrznym urządzeniem, program ten odwołuje się do osobnej biblioteki (Paramiko). Jest też skrypt w bashu, którego jedynym zadaniem jest uruchamianie tegoż programu. Skrypt wygląda następująco:

#! /bin/bash
#! /usr/bin/python3
python3 /home/pi/domoticz/scripts/python/esxicli.py > /dev/null
exit 0

I jak pisałem: gdy go odpalę z palca, komendą sh script.sh, wszystko pięknie działa. Gdy to samo robi domoticz jako "on action" (script://script.sh oczywiście script.sh jest we właściwej lokalizacji), w logu domoticza mam komunikat o wykonaniu skryptu. Tylko, że niestety właściwy program w pythonie się nie wykonuje.

Szukając przyczyn odkryłem, że gdy w skrypcie przed komendą uruchamiającą pythona wstawię sudo - program nawet uruchamiany z palca się wysypuje, z uwagą, że brak dostępu do biblioteki paramiko. Podejrzewam, że to samo się dzieje, gdy odpalane jest to z poziomu domoticza. Stąd pytanie: z jakim userem domoticz uruchamia takie polecenia i jak to naprawić, by było dobrze?
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Jarek_P: Użytkownik z jakiego korzysta Domoticz możesz w taki sposób namierzyć:

sudo ps axu | grep domoticz
W Twoim skrypcie zbędna jest druga linia (#! /usr/bin/python3), a w pierwszej chyba nie powinno być spacji po ! (czyli: #!/bin/bash).

Często spotykałem się z tym, że skrypty bashowe nie umiały rozwinąć nazwy polecenia (python3) na pełną ścieżkę, może
  • Odpowiedz
@Jarek_P: a określiłeś na jakim użytkowniku jest uruchomiony Domoticz? Spróbuj uruchomić basha jako ten sam użytkownik co domoticz, a potem swój skrypt:
sudo -u domoticz_user bash
/usr/bin/python3 /home/Python/esxicli.py

W samym skrypcie możesz też poprawić tymczasowo swoje wywołanie, żeby z pliku odczytać, czy są jakieś błędy:
/usr/bin/python3 /home/Python/esxicli.py >
  • Odpowiedz
@Zajc: homeassistanta to ja mam w domu i bardzo sobie go chwalę. Domoticza na raspberry postawiłem w pracy jako tymczasowe rozwiązanie do zdalnego nadzoru nad czymśtam, bo miało być to ładne i prościutkie w implementacji rozwiązanie do zdalnego klikania kilkudziesięcioma przekaźnikami. No i niestety, tymczasowe rozwiązanie się przyjęło...

Użytkownik - nie bardzo wiem, jak to zinterpretować, czy to oznacza, że domoticz chodzi na roocie? Czy na pi?

pi@Domoticz:~/domoticz/scripts $ sudo ps
  • Odpowiedz
@Jarek_P: czyli domoticz działa jako root... zrób sudo su i wtedy włącz skrypt. Możliwe, że biblioteka paramiko pythona zainstalowana jest tylko dla usera pi.
  • Odpowiedz
@Zajc: gdy uruchamiam skrypt sudo - wtedy mam ten sam błąd (brak paramiko). To samo z sudo su:

root@Domoticz:/home/Python# ./script_1.sh
Traceback (most recent call last):
File "/home/Python/esxicli.py", line 1, in
import
  • Odpowiedz
@Jarek_P: Aż dziwne że walczę z podobnym tematem. U mnie chodzi o mplayera i fifo do sterowania, skrypt odpalony ręcznie nawet na rootcie działa, ale z domoticza o ile mplayer włącza muzykę to fifo nie działa ;/
Jeśli nie potrzebujesz roota do tego skryptu to użyj runuser

runuser -l pi -c 'python3 /home/pi/domoticz/scripts/python/esxicli.py > /dev/null'
  • Odpowiedz
@Jarek_P: obstawiałbym zmienną środowiskową której python używa. Powłoka ją dostarcza, sudo wycina (z -E nie wycina), a domoticz też nie dostarcza. Trzeba ją ustawić w skrypcie.
  • Odpowiedz