我需要监视文件夹及其子文件夹中的变化,并使用观察者为此目的。到目前为止没有问题。但是,我想让 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
当然,像您那样使用绝对路径也会有效。