LINUX.ORG.RU
ФорумAdmin

python скрипт не запускается через автозагрузку

 


0

1

При запуске вручную из консоли скрипт запускается, но когда я помещаю его в /storage/.config/autostart.sh и перезагружаю систему скрипт не отрабатывает. При этом первая строка с шебангом:

#!/usr/bin/env python3

Пробовал заменить на

#!/usr/bin/python3

не помогло.

При этом

# ls -l /usr/bin/env
lrwxrwxrwx    1 root     root             7 Oct 28 18:52 /usr/bin/env -> busybox

и

# ls -l /usr/bin/python3
lrwxrwxrwx    1 root     root             9 Oct 28 19:05 /usr/bin/python3 -> python3.7
Ответ на: комментарий от zorinquen

Ну попробуй всё равно активироваться туда, что ли.

 cd /opt/python-new/
 source bin/activate
 pip --version
 pip install cryptography
anonymous
()
Ответ на: комментарий от zorinquen

Ещё предлагаю посмотреть, есть ли какая-то из комманд: systemd-cat либо logger.

Если есть и работает (оставляет сообшения в логе), то запиши в autostart.sh перед вызовом питона первыми строками

which python | systemd-cat
which pip | systemd-cat
pip --version | systemd-cat

либо

which python | logger
which pip | logger
pip --version | logger

И ребутнись, что запишет.

anonymous
()
Ответ на: комментарий от zorinquen

Ну тогда попробуй удалить sys.path.append('/storage/.opt/lib/python3.8/site-packages') и перезагрузиться. Скрипт запускай через python3.8.

anonymous
()
Ответ на: комментарий от anonymous

удалил sys.append.. и добавил в autostart.sh:

which python | systemd-cat
which pip | systemd-cat
pip --version | systemd-cat

в системе есть оба: и systemd-cat и logger. После ребута

# cat /storage/.config/script.log
Traceback (most recent call last):
  File "/storage/.config/script.py", line 39, in <module>
    fi = open('/tmp/port.txt', "r")              
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/port.txt'

хотя файл присутствует:

# ls -l /tmp/port.txt 
-rw-r--r--    1 root     root             6 Nov 29 14:14 /tmp/port.txt

zorinquen
() автор топика
Последнее исправление: zorinquen (всего исправлений: 1)
Ответ на: комментарий от zorinquen

cryptography in ./.opt/lib/python3.8/site-packages (3.1)

Может обновить тогда до 3.1.1, раз он на 3.1 ругается?

pip install cryptography --upgrade

python скрипт не запускается через автозагрузку (комментарий)

Loaded python version: 3.1.1, shared object version: b’3.1’

Вообще непонятно, 3.1 это версия чего, какого такого so?

Комент из исходников, вдруг кто-то поймёт о чём речь:

def _verify_package_version(version):
    # Occasionally we run into situations where the version of the Python
    # package does not match the version of the shared object that is loaded.
    # This may occur in environments where multiple versions of cryptography
    # are installed and available in the python path. To avoid errors cropping
    # up later this code checks that the currently imported package and the
    # shared object that were loaded have the same version and raise an
    # ImportError if they do not
    so_package_version = ffi.string(lib.CRYPTOGRAPHY_PACKAGE_VERSION)
    if version.encode("ascii") != so_package_version:
        raise ImportError(
            "The version of cryptography does not match the loaded "
            "shared object. This can happen if you have multiple copies of "
            "cryptography installed in your Python path. Please try creating "
            "a new virtual environment to resolve this issue. "
            "Loaded python version: {}, shared object version: {}".format(
                version, so_package_version
            )
        )

_verify_package_version(cryptography.__version__)

anonymous
()
Ответ на: комментарий от anonymous

А, там so-шки в пакет входят: cryptography/hazmat/bindings/_openssl.abi3.so, cryptography/hazmat/bindings/_padding.abi3.so.

Но как так могло случиться, что модуль — одной версии, а входящие в его состав so-шки — другой? Дичь какая-то.

anonymous
()
Ответ на: комментарий от anonymous
# pip install cryptography --upgrade
Collecting cryptography
  Downloading cryptography-3.2.1-cp35-abi3-manylinux2014_aarch64.whl (2.6 MB)
     |████████████████████████████████| 2.6 MB 60 kB/s 
Requirement already satisfied, skipping upgrade: cffi!=1.11.3,>=1.8 in ./.opt/lib/python3.8/site-packages (from cryptography) (1.14.3)
Requirement already satisfied, skipping upgrade: six>=1.4.1 in ./.opt/lib/python3.8/site-packages (from cryptography) (1.15.0)
Requirement already satisfied, skipping upgrade: pycparser in ./.opt/lib/python3.8/site-packages (from cffi!=1.11.3,>=1.8->cryptography) (2.20)
Installing collected packages: cryptography
  Attempting uninstall: cryptography
    Found existing installation: cryptography 3.1
    Uninstalling cryptography-3.1:
      Successfully uninstalled cryptography-3.1
Successfully installed cryptography-3.2.1

в логе та же ошибка

 # cat /storage/.config/script.log
Traceback (most recent call last):
  File "/storage/.config/script.py", line 39, in <module>
    fi = open('/tmp/port.txt', "r")              
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/port.txt'

zorinquen
() автор топика
Ответ на: комментарий от zorinquen

та же ошибка

Не та. Теперь модуль импортируется, судя по всему.

Ошибка говорит о том, что у тебя отсутствует файл /tmp/port.txt.

anonymous
()
Ответ на: комментарий от zorinquen

Возможно, что во время загрузки файл не успевает создаться. Если ОС пишет, что файла нет, значит его нет.

anonymous
()
Ответ на: комментарий от zorinquen

пр этом в autostart.sh

which python | systemd-cat
which pip | systemd-cat
pip --version | systemd-cat

/opt/bin/python3.8 /storage/.config/script.py &> /storage/.config/script.log &

а в script.py

#!/usr/bin/env python3

import pymysql
import sys
import settings
import pymysql
from cryptography.fernet import Fernet
.....................................
zorinquen
() автор топика
Ответ на: комментарий от zorinquen

Попробуй. Но лучше, наверное, среагировать на какое-то событие или просто подождать через inotifywait. Вместо sleep 20 можно так:

import time
import sys

...

while not sys.path.exists(file):
    time.sleep(0.1)

...
anonymous
()
Ответ на: комментарий от anonymous

Заработало! Ура! Теперь скрипт отрабатывает после ребута… Огромный респект анонимусу!

У меня у же buffer overflow в мозгу, но как я понял это после обновления

# pip install cryptography --upgrade

заработало? потом просто sleep 20 сыграл роль?

zorinquen
() автор топика
Ответ на: комментарий от zorinquen

Ну да, получается. Только теперь на 20 секунд твой autostart.sh будет останавливаться. Сделай лучше задержку в самом скрипте. Или вызывай через сабшелл:

(sleep 20; python3.8 ... ) &

Анонимусов тут целый легион :)

anonymous
()
Ответ на: комментарий от zorinquen

Работает без ошибок, вот и пустой, наверное.

anonymous
()
Ответ на: комментарий от anonymous

изменил в autostart.sh да, так нормально скрипт отрабатывает

(sleep 20; /opt/bin/python3.8 /storage/.config/script.py > /storage/.config/script.log) &

ах, да я и забыл, что анонимусов немерянно на лоре))

zorinquen
() автор топика
Ответ на: комментарий от anonymous

journalctl не выдал ничего особенного, может systemd-cat как-то не отрабатывает?

zorinquen
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.