从生成的进程中挂载失败

时间:2015-03-08 19:02:29

标签: linux init mount

我希望在插入后启动使用USB硬盘的过程 由于UDEV规则明确提到不要从RUN命令运行长时间进程,因此我向我的服务发送FIFO消息,然后打开相关进程。

所以流程是这样的:
UDEV&gt; <运行动作过程>发送FIFO消息给服务&gt;服务获取消息&gt;运行使用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
  • 一切都在root下运行(ps也显示了这一点,我省略了它以节省屏幕空间)。

简而言之:当我从shell运行/opt/spwn_frm_init时,一切正常。当我杀死它并让它从inittab重新生成时,它没有,mount失败并出现上述错误。

更新
尝试mount ext3驱动器时没有问题,但只能在NTFS驱动器上使用(使用ntfs-3g)。

1 个答案:

答案 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添加到mountmount开始工作:)

{{1}}中更好的错误消息可以节省大量时间......