Eu não sei por que mudar o nome do kernel teria feito a diferença (talvez sd*1
seja executado após sd*
, permitindo um pouco mais de tempo para o trabalho ser feito?), mas o udev não gosta de execução longa ações em eventos:
Starting daemons or other long running processes is not appropriate for udev; the forked processes, detached or not, will be unconditionally killed after the event handling has finished.
Original nohup
sugestão
Eu originalmente sugeri nohup
antes de ler meus próprios links :) - o que sugere que isso pode não funcionar de fato
regra do udev:
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1" SYMLINK+="usbflash", RUN+="/path/to/mywrapper.sh"
mywrapper.sh
(Nota: se você não redirecionar a saída, o nohup pode esvaziar seu diretório com um arquivo nohup.out
):
#!/bin/sh
nohup /path/to/myscript.sh >/log/myscript.log 2>&1 &
Então myscript.sh
pode ser o que é.
Mais recente systemd
sugestão
O terceiro link abaixo sugere disparar um serviço systemd quando o dispositivo está conectado. Essa entrada no blog faz mais trabalho do que eu acho que você precisa, devido a garantir que as informações do dispositivo sejam passadas para o serviço, / em> você pode se safar simplesmente usando o systemd como seu método de daemonização:
ACTION=="add", SUBSYSTEM=="block", KERNEL=="sd[a-z]1" SYMLINK+="usbflash", RUN+="/usr/bin/systemctl start my-usb-backup.service"
Com um serviço simples, my-usb-backup.service
:
[Unit]
Description=run myscript
[Service]
Type=oneshot
ExecStart=/path/to/myscript.sh
Veja também: