如何运行脚本就像在启动时运行一样?

如何运行脚本就像在启动时运行一样?

我有一个在启动时运行的脚本,但是它给了我在日志文件中看到的错误。当我手动运行它时,它运行良好 - 可能环境已更改。

有没有办法在启动时运行这样的脚本而无需重新启动?

脚本位于/etc/init.d带有符号链接的/etc/rc5.d/S97mounter.sh.

答案1

你可以以 root 身份运行

env - scriptname

这将在运行脚本之前清除您的环境,但是,它也会保留您的shell.要清除环境并将 shell 设置为sh,请执行以下操作:

env -i /bin/sh -c scriptname

然后,这将使用运行脚本/bin/sh。但是,这不会完全模拟启动环境,因为这不计入当时可能未运行的其他服务。

我发现了一个类似的模拟 crontab 环境的问题,并且发布了一个非常有用的解决方案嗯嗯

使用它,您可以在脚本中运行它并重新启动主机,然后使用环境文件加载您的环境:

启动脚本的一部分:

env > /var/tmp/bootenv

然后在正常运行时设置相同的启动环境,执行以下操作:

env - `cat /var/tmp/bootenv` /bin/sh -c scriptname

答案2

当程序通过用户会话而不是启动脚本启动时,有些事情可能会有所不同:

  • 程序继承了许多环境变量(包括PATH,,HOME……)。
  • 该程序继承了几个文件描述符,包括终端。
  • 限制可能不同。

要在最小环境下运行程序并关闭标准文件描述符,您可以使用类似

env -i PATH=/bin:/usr/bin:/sbin:/usr/sbin myprogram </dev/null >/dev/null 2>/dev/null

检查init系统上的手册页或其他文档,了解它定义了哪些环境变量。许多打算作为守护进程运行的程序只需要PATH它就可以了。上面的值PATH是 Debian 上 init 的默认值。

答案3

如果没有有关脚本正在执行的操作以及遇到的错误的更多信息,则很难给出准确的答案。这么说来,大概就是可能的重新创建环境,但这可能会非常困难,需要卸载或绑定安装文件系统或其他类似有趣的事情。

另一种选择是使用类似的东西创建虚拟机虚拟盒子或者键盘虚拟机并使用它执行调试,允许您根据需要重新启动虚拟机,而无需重新启动主机。

相关内容