启动时运行 Watcher

启动时运行 Watcher

我需要监视文件夹及其子文件夹中的变化,并使用观察者为此目的。到目前为止没有问题。但是,我想让 Watcher 守护进程在重新启动时运行。首先,我尝试了以下方法。

/etc/init.d

我在这里创建了以下简单脚本

#! /bin/bash
watcher.py start

位于文件夹watcher.py/usr/local/bin。然后我从该/etc/rc2.d文件夹创建了一个符号链接ln -s /etc/init.d/watcher /etc/rc2.d/S99watcher并重新启动。

检查watcher.py status报告说它没有运行。所以我修改了我的init.d脚本如下

#! /bin/bash
/usr/bin/python /usr/local/bin/watcher.py start

然后重新启动。这次watcher.py status正确地报告了 Watcher 正在运行。

眼前的问题可能已经解决,但我仍然不明白为什么。为什么在交互式 shell 提示符下,我只需键入即可watcher.py start启动 Watcher 守护程序,而在启动时,我需要明确告诉 Python 运行该脚本?

我通常通过坚持不懈而不是深入了解这些东西的工作原理来使我的 shell 和启动脚本正常运行。我希望这里有人可以提供更明智的见解。

答案1

何时设置 $PATH?

关于/etc/profile

正如我们所读到的这里

...该/etc/profile文件没有太大区别,但它用于在用户 shell 上设置系统范围的环境变量。这些变量有时与 中的变量相同.bash_profile,但该文件用于为系统的所有 shell 用户设置初始PATH值。PS1

和:

除了设置环境项之外,/etc/profile还将执行以下脚本:/etc/profile.d/*.sh

这意味着$PATH(对于所有用户)实际上设置了经过脚本中/etc/profile.d,我们也可以得出结论这里

查看我的系统,并非所有内容都与描述完全一致这里,但该信息仍然得到证实。

/etc对字符串进行快速(文本)搜索: /usr/local/bin,我知道它在我的(全局)中$PATH,生成文件/etc/environment,其中包含以下行:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

这些正是我的目录$PATH(除本地目录外)。

底线是$PATH没有设定中的脚本/etc/init.d运行,但实际上设置经过脚本etc/init.d

该怎么办?

答案这里建议$PATH在脚本顶部设置变量。再次查看我的系统,这正是我的/etc/init.d/saned脚本所做的:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

当然,像您那样使用绝对路径也会有效。

相关内容