Сценарий Python не запускается при вызове из run-частей через USBmount

Я использую Ubuntu Server и у меня есть скрипт Python, который я пытаюсь запустить автоматически, когда USB-накопитель подключен, однако скрипт не запускается, когда usbmount выполняет свою команду run-parts. Если я сам запускаю run-parts, скрипт работает нормально. Я вставил некоторые записи в мой bash-скрипт, и он показывает, что скрипт на самом деле вызывается при подключении USB-накопителя, он просто не выполняет мой скрипт на python.

Я потянул за это весь день, я думаю, может быть, есть проблема с разрешениями, которая не позволяет usbmount выполнить скрипт на python, но если есть, я не могу понять это .

Пояснение: у меня есть скрипт оболочки в /etc/usbmount/mount.d, который регистрирует, когда он вызывается, а затем вызывает мой скрипт на python.

0
задан 15 December 2018 в 03:29

1 ответ

Не уверен насчет usbmount, но вот причина похожего случая: /etc/dhcp/dhclient-exit-hooks.d/ В этом конкретном случае ловушки выполняются /bin/dhclient-script как source (т.е. с . ). run-parts вызывается только для получения списка скриптов в этой папке. run-parts --list /etc/dhcp/dhclient-exit-hooks.d/.

Короче говоря, скрипты должны быть оболочками. Увидеть ниже. Однако ничто не мешает вам явно вызывать интерпретатор python из этого сценария оболочки (см. далее ниже).

# run given script
run_hook() {
    local script="$1"
    local exit_status=0

    if [ -f $script ]; then
        . $script                  # <=== must be shell script
        exit_status=$?
    fi

    if [ -n "$exit_status" ] && [ "$exit_status" -ne 0 ]; then
        logger -p daemon.err "$script returned non-zero exit status $exit_status"
    fi

    return $exit_status
}

# run scripts in given directory
run_hookdir() {
    local dir="$1"
    local exit_status=0

    if [ -d "$dir" ]; then
        for script in $(run-parts --list $dir); do
            run_hook $script
            exit_status=$((exit_status|$?))
        done
    fi

    return $exit_status
}

Пример вызова скрипта python

#!/bin/bash
#
# Invoke a python script to update the DNS zone with the WLAN IP address
# The python script is in the same folder but not picked up by run-parts because its name contains a "."
#
PYTHON3_INTERPRETER=$(which python3)
THIS_FOLDER=/etc/dhcp/dhclient-exit-hooks.d
THE_SCRIPT=update_zone.py

${PYTHON3_INTERPRETER} ${THIS_FOLDER}/${THE_SCRIPT}

0
ответ дан 20 December 2019 в 12:23

Другие вопросы по тегам:

Похожие вопросы: