在Ubuntu 16.04上运行长时间的udev脚本。

在Ubuntu 14.04上,我有一个长时间运行的bash脚本,带有一个简单的udev规则,像这样完美地工作:
ACTION=="change", SUBSYSTEM=="block", RUN+="/opt/script.sh"

在Ubuntu 16.04上,情况并不顺利。脚本开始运行,但在完成之前就被终止了。然后我尝试更改我的udev规则来调用一个包装器脚本,该脚本将分离脚本。我尝试过:
#!/bin/sh
nohup /opt/script.sh  &

然后我尝试了:
#!/bin/sh
/opt/script.sh | at now

无济于事。
然后我尝试创建一个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

我得在某个时候运行脚本,但我的脚本依赖于udev参数,比如$ID_FS_TYPE,这些参数不能通过这种方式传递。
我想我想要的很简单,只需插入光盘并从udev规则中运行我的脚本,而不终止脚本。怎样才是最好的方法呢?
1个回答

我意识到我需要做的:

 #!/bin/sh
 echo /opt/script.sh | at now

你会接受自己的回答吗?毕竟这是适合你的方法。我曾经见过一种使用进程分离(disown)的方法,就像在 https://askubuntu.com/questions/445735/why-do-my-udev-rules-run-if-i-use-udevadm-trigger-but-not-at-boot-time 中所述。但是你在这里使用的调度(at)更简单。 - user.dz
2这应该添加到udev手册页中。 - Kenny Evitt