故障集----Shell脚本执行报错(一)

前言:

我们使用Shell脚本执行一件部署服务、组件、模块的机会还是比较多的,此处记载一些有关Shell脚本执行的相关注意事项

一、Shell脚本调试

1.1 Shell脚本调试

1.1.1 常用选项

-n 只读取shell脚本,但不实际执行
-x 进入跟踪方式,显示所执行的每一条命令
-c “string” 从strings中读取命令
"-n"可用于测试shell脚本是否存在语法错误,但不会实际执行命令

1.2 Shell脚本执行报错案例

1.2.1 docker 部署ceph 执行报错

现象

[root@ceph01 ~]# docker ps -a
CONTAINER ID        IMAGE                                             COMMAND                CREATED             STATUS                      PORTS               NAMES
b5c6deafa984        ceph/daemon:v3.0.5-stable-3.0-luminous-centos-7   "/entrypoint.sh mon"   5 minutes ago       Exited (10) 4 minutes ago                       mon

查看日志如下

[root@ceph01 ~]# docker logs -f mon
creating /etc/ceph/ceph.client.admin.keyring
creating /etc/ceph/ceph.mon.keyring
creating /var/lib/ceph/bootstrap-osd/ceph.keyring
creating /var/lib/ceph/bootstrap-mds/ceph.keyring
creating /var/lib/ceph/bootstrap-rgw/ceph.keyring
creating /var/lib/ceph/bootstrap-rbd/ceph.keyring
parse error setting 'fsid' to ''

monmaptool: monmap file /etc/ceph/monmap-ceph
monmaptool: generated fsid 1aee7ec0-8fa3-4b2c-8318-7cbc4f0afc60
monmaptool: writing epoch 0 to /etc/ceph/monmap-ceph (1 monitors)
importing contents of /var/lib/ceph/bootstrap-osd/ceph.keyring into /etc/ceph/ceph.mon.keyring
importing contents of /var/lib/ceph/bootstrap-mds/ceph.keyring into /etc/ceph/ceph.mon.keyring
importing contents of /var/lib/ceph/bootstrap-rgw/ceph.keyring into /etc/ceph/ceph.mon.keyring
importing contents of /var/lib/ceph/bootstrap-rbd/ceph.keyring into /etc/ceph/ceph.mon.keyring
importing contents of /etc/ceph/ceph.client.admin.keyring into /etc/ceph/ceph.mon.keyring
2020-08-03 14:40:59.368163 7fee4b2c8ec0 -1 failed for service _ceph-mon._tcp
2020-08-03 14:40:59.368243 7fee4b2c8ec0 -1 unable to get monitor info from DNS SRV with service name: ceph-mon
no monitors specified to connect to.
......省略部分内容
2020-08-03 14:41:01.158399 7f29caad4ec0 -1 ceph-mon: warning: no initial monitors; must use admin socket to feed hints
2020-08-03 14:41:01.158602 7f29caad4ec0 -1 ceph-mon: generated monmap has no fsid; use '--fsid '

问题定位
① :查看域名解析问题
② :查看脚本语法、命令问题
③ :使用sh -x 执行脚本查看执行过程
故障集----Shell脚本执行报错(一)_第1张图片
这里在启动mon容器之前 在ceph.conf中插入了配置项,但一开始是没有sleep 5这个过程的。
导致容器启动失败的原因猜测:因为系统执行过快,导致此处尚未插入配置就直接启动了mon,此处添加了“等待5秒”之后,先清理异常状态的容器,然后再次执行脚本,发现容器就可以正常运行了。

小结:

Shell脚本执行的过程中,在执行安装、追加配置等步骤的时候,可以养成sleep (延时)执行下一步的习惯,此处为一个简单的报错处理,之后会持续更新

你可能感兴趣的:(故障集)