我希望在插入后启动使用USB硬盘的过程 由于UDEV规则明确提到不要从RUN命令运行长时间进程,因此我向我的服务发送FIFO消息,然后打开相关进程。
所以流程是这样的:
UDEV&gt; <运行动作过程>发送FIFO消息给服务&gt;服务获取消息&gt;运行使用HDD(也称为HDD-PROCESS)的过程。
如果我从shell-1运行我的服务并从shell-2运行'action process'(UDEV运行的那个),一切正常(包括用udev尝试时)。
但是在部署中,服务是从init生成的,当它发生时,mount
命令无法说“没有这样的设备”。
然后,我使用fork
和setsid
分离了“HDD-PROCESS”,但这也无济于事。
:
::respawn:/opt/spwn_frm_init
ps
相关输出:
PID PPID PGID SID COMM ARGS
31112 1 31112 31112 spwn_frm_init /bin/sh /opt/spwn_frm_init
31113 31112 31112 31112 runSvc /bin/sh /app/sys/runSvc
31114 31113 31112 31112 python python /app/sys/mainSvc.py
24064 1 24064 24064 python /usr/bin/python /app/sys/hdd_proc.py sdb1
ps
也显示了这一点,我省略了它以节省屏幕空间)。 简而言之:当我从shell运行/opt/spwn_frm_init
时,一切正常。当我杀死它并让它从inittab重新生成时,它没有,mount
失败并出现上述错误。
更新
尝试mount
ext3驱动器时没有问题,但只能在NTFS驱动器上使用(使用ntfs-3g)。
答案 0 :(得分:0)
找到它!
衍生进程与从shell运行的另一个进程之间的区别之一是环境变量,当我想要的只是调用mount
时,通常应该是一个问题。
但是当我发现问题只发生在NTFS
驱动器上时,我突然想到mount
可能需要调用ntfs-3g
,因此值得检查PATH
是否可以访问which ntfs-3g
1}}变量。
/usr/local/bin/ntfs-3g
导致PATH
在默认shell /usr/local/bin
中提到,但在init中生成的那个中没有。
要解决此问题,我在“HDD-PROCESS”中将此PATH
添加到mount
,mount
开始工作:)
{{1}}中更好的错误消息可以节省大量时间......