2015-03-08 114 views
0

我想要启动一个进程,一旦它被插入使用USB硬盘驱动器。
由于UDEV规则明确提到不要从RUN命令运行长时间的进程,因此我会向我的服务发送FIFO消息,然后打开相关进程。安装从产生的进程失败

所以流程如下:
UDEV>运行动作进程>向服务发送FIFO消息>服务获取消息>运行使用HDD(又名HDD-PROCESS)的进程。

如果我从shell-1运行我的服务并从shell-2运行'action process'(UDEV运行的那个),那么一切正常(包括使用udev进行尝试时)。
但是在部署中,该服务是从init产生的,如果发生这种情况,mount命令会失败,说“没有这样的设备”。

然后,我用forksetsid分开“HDD-PROCESS”,但这也没有帮助。

从inittab文件:

::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失败并出现上述错误。

UPDATE:
试图mount一个ext3驱动器时,但只对NTFS一个是没有问题的(使用NTFS-3G)。

回答

0

找到了!
生成的进程与从shell运行的另一个进程之间的区别之一是环境变量,当我想要的所有内容都是mount时,这些变量通常应该是个问题。
但是当我发现问题只发生在NTFS驱动器上时,突然想到mount可能需要调用ntfs-3g,因此值得检查第二个是否可以在PATH变量中访问。

which ntfs-3g导致/usr/local/bin/ntfs-3g这是在默认shell PATH中提到的,但不是从init产生的那个。

为了解决这个问题,我在“HDD-PROCESS补充说:”这/usr/local/binPATHmount开始工作:)

mount一个更好的错误信息可能保存了大量的时间在这里...