Me gustaría tener automáticamente algunos archivos de un dispositivo de almacenamiento copiados en su inserción. Estoy buscando usar el mismo método en ambos sistemas que usan systemd y sistemas que usan scripts de inicio (por ejemplo, OpenRC en Gentoo). Además, buscaría no romper el montaje automático.
Según muchas otras preguntas relacionadas con este problema, esto se hace mejor a través de udev, y casi funciona, si no fuera por el udev Posthook que se ejecuta estrictamente antes del montaje automático (de una manera en la que udev verifica el estado de salida de cualquier script llamó y cualquier script que el script llame, por algún proceso que para mí me parece mágico):
La ejecución del script funciona, solo que el archivo no se puede copiar, porque (creo) el desencadenador automount espera a que el script de copia termine primero:
chymera@quiethost ~/.repositorg/transfer $ cat /etc/udev/rules.d/95-local.rules
ACTION=="add", KERNEL=="sd?1", ENV{ID_FS_UUID}=="4C3D-8BCB", RUN+="/bin/su chymera -c /home/chymera/.repositorg/transfer/4C3D-8BCB.sh"
chymera@quiethost ~/.repositorg/transfer $ cat 4C3D-8BCB.sh
#!/usr/bin/env bash
touch ~/lalax.txt
cp "/run/media/chymera/NIKON D750/lala.txt" ~/
chymera@quiethost ~/.repositorg/transfer $ ls ~/lal*
/home/chymera/lalax.txt
chymera@quiethost ~/.repositorg/transfer $ ls /run/media/chymera/NIKON\ D750/
DCIM lala.txt NIKON001.DSC
La adición de suspensión y el desvío de la ejecución del script a una subshell no parecen funcionar. El archivo no se vuelve accesible, porque ahora el montaje automático está completamente inhibido:
chymera@quiethost ~/.repositorg/transfer $ cat /etc/udev/rules.d/95-local.rules
ACTION=="add", KERNEL=="sd?1", ENV{ID_FS_UUID}=="4C3D-8BCB", RUN+="/bin/su chymera -c /home/chymera/.repositorg/transfer/_4C3D-8BCB.sh"
chymera@quiethost ~/.repositorg/transfer $ cat _4C3D-8BCB.sh
#!/usr/bin/env bash
nohup /bin/bash /home/chymera/.repositorg/transfer/4C3D-8BCB.sh & exit
chymera@quiethost ~/.repositorg/transfer $ cat 4C3D-8BCB.sh
#!/usr/bin/env bash
touch ~/lalax.txt
sleep 5
cp "/run/media/chymera/NIKON D750/lala.txt" ~/
chymera@quiethost ~/.repositorg/transfer $ ls ~/lal*
/home/chymera/lalax.txt
chymera@quiethost ~/.repositorg/transfer $ ls /run/media/chymera/