我编写了一个安装脚本,以便在获得新服务器后安装我喜欢的程序和设置。
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。