udev não executa o script bash como argumento RUN [closed]

3

Estou tentando definir um script simples para ser executado sempre que um dispositivo de armazenamento USB estiver sendo conectado ao computador. Para essa tarefa, eu tenho um arquivo 100-usb.rules em /etc/udev/rules.d , que tem uma regra muito genérica:

ACTION=="add", RUN+="/usr/local/auto-update.sh"

Espero que sempre que eu ligar qualquer coisa ao computador que o script acione. A razão pela qual a regra é tão genérica é porque não importa que tipo de regra eu tentei usar o script NUNCA seja executado.

Agora, o script /user/local/auto-update.sh tem um comando muito simples:

#!/bin/bash

mkdir /tmp/testfolder

Eu fiz questão de dar direitos de execução ao script com

sudo chmod +x /usr/local/auto-update.sh

depois de executar o comando ls -l /usr/local/auto-update.sh , obtenho as permissões

-rwxr-xr-x

O estranho é que, se eu alterar minha regra, pareço algo como

ACTION=="add", RUN+="/bin/mkdir /tmp/folder1"

Então, na verdade, está indo em frente e criando essa pasta.

Eu realmente estou perdido aqui ... Eu não tenho idéia porque não está funcionando!

    
por kfirba 13.09.2015 / 14:15

1 resposta

0

O problema é que udev não fornece PATH em suas exportações ambiente ao executar scripts.

Adicione um PATH=/bin:/usr/bin:/usr/local/bin ou o que for ao início do seu script bash.

Por exemplo, eu despejei o conteúdo env quando um script meu foi chamado como uma chave usb foi conectada e ficou:

ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host4
DEVTYPE=scsi_host
ID_BUS=usb
ID_MODEL=Transcend
ID_MODEL_ENC=Transcend
ID_MODEL_ID=4000
ID_REVISION=0035
ID_SERIAL=TS-RDF5_Transcend_000000000036
ID_SERIAL_SHORT=000000000036
ID_TYPE=scsi
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=TS-RDF5
ID_VENDOR_ENC=TS-RDF5\x20
ID_VENDOR_ID=8564
SEQNUM=2023
SUBSYSTEM=scsi
USEC_INITIALIZED=65380632

i.e. sem PATH.

    
por meuh 13.09.2015 / 15:02

Tags