【问题标题】:How to run script in Solaris after boot once引导一次后如何在 Solaris 中运行脚本
【发布时间】:2015-03-24 17:02:42
【问题描述】:

我正在寻找第一次启动 Solaris 时运行 shell 脚本的正确方法。 我需要运行 resize 命令,有一个我的脚本

#!/bin/sh -ux
echo "#!/bin/sh -ux" > /etc/rc3.d/S90scale
echo "/sbin/zpool set autoexpand=on rpool" >> /etc/rc3.d/S90scale
echo "/sbin/zpool online -e rpool c1d0" >> /etc/rc3.d/S90scale
echo "rm /etc/rc3.d/S90scale" >> /etc/rc3.d/S90scale
echo "/sbin/shutdown -y -i6 -g0" >> /etc/rc3.d/S90scale
chmod a+x /etc/rc3.d/S90scale

实际上脚本工作正常,但不幸的是调整大小不起作用。当我在用户会话中做同样的事情时,一切都很好。

我到底做错了什么?

【问题讨论】:

  • 当您运行脚本时,您已登录并且您的 .profile 已加载,用于配置您的环境。在启动时,您的 .profile 尚未加载,因此脚本在不同的环境中运行。可能是这样的猜测。

标签: solaris


【解决方案1】:

您的方法不是在启动后运行一次脚本的“正确”方法,因为它使用的是传统方法。正确的方法是创建一个smf service that runs once。但是,它确实适用于 Solaris 10 和 11,因为 rc 脚本虽然已弃用,但仍在处理中,因此我不会详细说明 smf

主要问题是您不检查错误,无论发生什么,它都会删除脚本并重新启动以防止任何分析发生。

我建议修改您的脚本以记录文件中发生的情况并在出错时退出:

#!/bin/ksh
cat > /etc/rc3.d/S90scale <<%EOF%
exec > /var/tmp/S90scale.log 2>&1 # logs everything to file
set -xe                           # show commands and exits on error
/sbin/zpool set autoexpand=on rpool
/sbin/zpool online -e rpool c1d0
mv /etc/rc3.d/S90scale  /etc/rc3.d/_S90scale
/sbin/shutdown -y -i6 -g0
%EOF%
chmod a+x /etc/rc3.d/S90scale

下次重新启动完成后,您应该查看/var/tmp/S90scale.log 文件,可能会在其中看到一条错误消息。

【讨论】:

  • 其实我还有一个错误,不是通过脚本链接的,但是使用exec的日志方式非常有用,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 2019-03-01
  • 2018-12-19
  • 1970-01-01
  • 2011-01-05
  • 2015-05-26
相关资源
最近更新 更多