我正在寻找运行shell脚本的正确方法,首先启动Solaris。 我需要运行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
实际上脚本工作正常,但不幸的是调整大小不起作用。当我从用户会话中做同样的事情时,一切都很好。
我究竟做错了什么?
答案 0 :(得分:2)
在使用传统方法时,您的方法不是在启动后运行脚本的“正确”方法。正确的方法是创建smf
service that runs once。但是,无论如何,它仍然可以作为rc
脚本使用Solaris 10和11,但是已经过处理,因此我不会详细说明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
文件,并可能在那里看到错误消息。