在Ubuntu 14.04上,我有一个长时间运行的bash脚本,带有一个简单的udev规则,像这样完美地工作:
在Ubuntu 16.04上,情况并不顺利。脚本开始运行,但在完成之前就被终止了。然后我尝试更改我的udev规则来调用一个包装器脚本,该脚本将分离脚本。我尝试过:
然后我尝试了:
无济于事。
然后我尝试创建一个systemd服务...
我得在某个时候运行脚本,但我的脚本依赖于udev参数,比如$ID_FS_TYPE,这些参数不能通过这种方式传递。
我想我想要的很简单,只需插入光盘并从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规则中运行我的脚本,而不终止脚本。怎样才是最好的方法呢?
disown
)的方法,就像在 https://askubuntu.com/questions/445735/why-do-my-udev-rules-run-if-i-use-udevadm-trigger-but-not-at-boot-time 中所述。但是你在这里使用的调度(at
)更简单。 - user.dzudev
手册页中。 - Kenny Evitt