安装脚本检测失败

安装脚本检测失败

我编写了一个安装脚本,以便在获得新服务器后安装我喜欢的程序和设置。

apt-get install git
git clone http://[email protected] .vim
ln -s .vimrc .vim/vimrc
...

但是,如果安装过程中出现错误,我该如何中断安装脚本并记录错误?例如,如果github服务器关闭,创建指向不存在的符号链接显然是没有用的vimrc

(或者您有更好的方法来初始化服务器?)

答案1

从基本层面上讲,你可以将 STDERR 重定向到文本文件来记录错误

git clone http://[email protected] .vim 2>> ~/logs/vim-error.txt

或者在这个特定的例子中你可以做一个 if 语句

if [ -f .vimrc ] ## -f means "if file exists"
then
ln -s .vimrc .vim/vimrc
fi

或者在 git clone 命令之后,你可以检查它的退出状态,如果它不是 0,则退出脚本

if [ $? -ne 0 ]
then
exit 1
fi

我的所有脚本都是 n00b 级别的脚本,我发现这些脚本通常可以完成我需要它们做的事情。

答案2

当然,这就是我使用的方法。但是,您要寻找的原则是幂等性和容错性,即脚本不应该搞乱任何东西,并且可以优雅地降级。要创建链接,请先测试文件是否存在,如下所示;

[ -s .vimrc ] && ln -s .vimrc .vim/vimrc

但检查链接是否已存在也很方便;(如果存在则跳过)

[ -s .vimrc ] && [ ! -L .vim/vimrc ] && ln -s .vimrc .vim/vimrc

基本上就是检查文件是否存在,并且文件不为零,如果文件不存在则创建链接。bash 支持的文件测试有很多,如下所示:在此处的手册中

通常也有这些的快捷版本,但我最好先向您展示完整版本......

通常apt-get update首先运行它来刷新包列表...

显然,如果已经安装了 git,就没有必要再尝试安装它了(尽管你可能想升级它

dpkg -l git >/dev/null || apt-get -q -y install git

如果您只是想要最新版本,不管怎样,不要同时进行测试,只有在有可用版本时 apt 才会升级;

 apt-get -q -y install git

我倾向于在安装程序脚本中使用完整路径,只是为了提醒自己并确保它不会做任何愚蠢的事情。例如

 #explicitly set the full path somewhere
 HOME=/home/tomh

 #and then double check, partcular if you are about to do something descructive
[ "$HOME" == "" ] && exit 99
[ -s $HOME/.vimrc ] && ln -s $HOME/.vimrc $HOME/.vim/vimrc

为了从 git 获取文件,我会尝试这样做;

if [ ! -d $HOME/.vim ]; then
cd $HOME
git clone http://[email protected] .vim
else
cd $HOME/.vim
git pull
fi

使用前请检查,我没有测试过

答案3

Chef,特别是 chef-solo。可能需要一些前期设置,但一旦您准备好食谱,新机器设置基本上就是枚举服务器的 run_list。

相关内容