Realizei que precisava fazer:
#!/bin/sh
echo /opt/script.sh | at now
No Ubuntu 14.04 eu tenho um longo script de execução com uma regra do udev simples que funciona perfeitamente assim:
ACTION=="change", SUBSYSTEM=="block", RUN+="/opt/script.sh"
No Ubuntu 16.04 as coisas não estão indo tão bem. O script começa a ser executado, mas depois é morto antes de ser concluído. Eu então tentei mudar minha regra do udev para chamar um script warapper que iria separar o script. Eu tentei:
#!/bin/sh
nohup /opt/script.sh &
Então eu tentei:
#!/bin/sh
/opt/script.sh | at now
Sem sucesso.
Eu então tentei criar um serviço systemd ...
ACTION=="change", SUBSYSTEM=="block", ENV{SYSTEMD_WANTS}=="justrunthescript.service"
/etc/systemd/system/justrunthescript.service
[Unit]
Description=Just run the script
[Service]
ExecStart=/opt/script.sh
Que eu comecei a executar o script em algum momento, mas meu script se baseia em parâmetros do udev como $ ID_FS_TYPE que não são passados dessa maneira.
Acho que o que eu quero é bem simples, basta inserir um disco e executar meu script a partir de uma regra do udev e não matar o script. Qual é a melhor maneira de fazer isso?
Realizei que precisava fazer:
#!/bin/sh
echo /opt/script.sh | at now
Tags command-line scripts 16.04 systemd udev