各位大佬我这段 sh 脚本有什么问题吗?

2017-09-17 16:19:39 +08:00
 VgV
#!/bin/bash
CheckURL="http://www.baidu.com/" #自定义远程地址,访问状态为 200 时执行启动 ssh 命令。

STATUS_CODE=`curl -o /dev/null -m 5 --connect-timeout 5 -s -w %{http_code} $CheckURL`
if [ "$STATUS_CODE" = "200" ]; then
service sshd start
fi
我试了一直不行,后来我 ping 了一下,再执行就成功了,这是为何。没 ping 之前一直不成功。
3271 次点击
所在节点    Linux
24 条回复
VgV
2017-09-17 16:23:41 +08:00
别说解析问题哦,我在测试机子的时候,用计划定时执行的,已经测试了几天了 SSH 一直没启动。
我也以为是解析问题,之后我用 VNC 登录后 ping 了一下再执行就成功了,我一脸懵 b...
Lpl
2017-09-17 17:05:31 +08:00
有调试么?比如在你不行的时候,status_code 是多少?
VgV
2017-09-17 17:10:45 +08:00
@Lpl 这真没有,用 crond 挂着定时,结果没执行,应该怎么看结果。echo 到文本里?
keysona
2017-09-17 17:18:47 +08:00
嗯,重定向到某个文件就可以看。

* * * * * /your/script.sh > /var/log/xx.log 2>&1
VgV
2017-09-17 17:25:12 +08:00
@keysona 感谢,有个疑问 2 和 &1 代表什么,不太懂。
azh7138m
2017-09-17 17:34:01 +08:00
1 stdout
2 stderr
大概是这么个意思
VgV
2017-09-17 17:38:31 +08:00
现在不能重现之前的情况了,因为 ping 了,所以现在执行都是成功的。
没 PING 之前我执行 sh 123.sh 没什么提示,PING 了之后,我再执行就有启动 SSH 提示了。
VgV
2017-09-17 17:46:10 +08:00
@azh7138m 谢谢解答,后面那个&1 是代表什么
azh7138m
2017-09-17 17:49:58 +08:00
把 2 重定向到 1,大概这么个意思
charove
2017-09-17 18:17:54 +08:00
@VgV 2 是错误信息,1 是正确的输出结果,就是把这俩信息都输出
Beebird
2017-09-17 18:39:50 +08:00
我猜是 ping 每次都 lookup dns server, curl 则默认读你本地的 dns cache
起初你系统里的 dns cache baidu 的 ip 失效了,所以无法返回 200,而当你 ping 了一次之后,dns cache 的 baidu entry 就被 renew 了。
以上是猜测,不对请指正。。。
just1
2017-09-17 19:03:55 +08:00
ping 完才成功就是解析问题
VgV
2017-09-17 19:37:18 +08:00
@charove 感谢解答。


@Beebird 那么是不是脚本应该改进或者修改什么?
aver4vex
2017-09-17 20:02:52 +08:00
如果想偷懒就在调用之前执行一下 ping 咯
VgV
2017-09-17 20:04:50 +08:00
@aver4vex 哈哈哈,好吧,刚才想安装 nscd 服务,后来想想 ping 也可以,节省资源。
我先在脚本前面加个 PING 试试
VgV
2017-09-17 20:22:50 +08:00
/123.sh: line 6: service: command not found
log 错误提示

@aver4vex
@Beebird
@azh7138m
@keysona
@Lpl
aver4vex
2017-09-17 20:31:26 +08:00
#!/bin/bash
CheckURL="http://www.baidu.com/" #自定义远程地址,访问状态为 200 时执行启动 ssh 命令。
ping -c 4 $CheckURL
STATUS_CODE=`curl -o /dev/null -m 5 --connect-timeout 5 -s -w %{http_code} $CheckURL`
if [ "$STATUS_CODE" = "200" ]; then
service sshd start
fi
VgV
2017-09-17 20:48:49 +08:00
/etc/init.d/sshd start
centos6+原来要这样
VgV
2017-09-17 20:50:58 +08:00
@aver4vex 感谢,不过-c 1 就可以了吧.....
Beebird
2017-09-17 20:52:05 +08:00
你用 cron 跑,service 路径不在 PATH 里
在 /etc/crontab 里修改(假定你的发行版 service 在 /usr/sbin/下):

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/sbin/service

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/391395

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX