Я использую Ubuntu Server и у меня есть скрипт Python, который я пытаюсь запустить автоматически, когда USB-накопитель подключен, однако скрипт не запускается, когда usbmount выполняет свою команду run-parts. Если я сам запускаю run-parts, скрипт работает нормально. Я вставил некоторые записи в мой bash-скрипт, и он показывает, что скрипт на самом деле вызывается при подключении USB-накопителя, он просто не выполняет мой скрипт на python.
Я потянул за это весь день, я думаю, может быть, есть проблема с разрешениями, которая не позволяет usbmount выполнить скрипт на python, но если есть, я не могу понять это .
Пояснение: у меня есть скрипт оболочки в /etc/usbmount/mount.d, который регистрирует, когда он вызывается, а затем вызывает мой скрипт на python.
Не уверен насчет 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}