派生进程挂载失败

mount fails from spawned process

我想在插入 USB 硬盘后启动一个进程。
由于 UDEV 规则特别提到不要从 运行 命令 运行 长时间处理,我向我的服务发送了一个 FIFO 消息,然后打开相关进程。

所以流程是这样的:
UDEV > 运行s 操作进程 > 将 FIFO 消息发送到服务 > 服务获取消息 > 运行s 使用 HDD 的进程(又名 HDD-PROCESS)。

如果我 运行 我的服务来自 shell-1 和 运行 'action process'(UDEV 运行s 的服务)来自 shell-2 一切正常(包括使用 udev 尝试时)。
但在部署中,该服务是从 init 生成的,当它生成时,mount 命令失败并显示 "No such device"。

然后我用 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

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

更新:
尝试 mount ext3 驱动器时没有问题,但仅限于 NTFS 驱动器(使用 ntfs-3g)。

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

which ntfs-3g 导致 /usr/local/bin/ntfs-3g 在默认 shell PATH 中提到,但在从 init.

产生的那个中没有提到

为了解决这个问题,我在 "HDD-PROCESS" 中将 /usr/local/bin 添加到 PATH 并且 mount 开始工作:)

mount 中更好的错误消息本可以在这里节省很多时间...