V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
VgV
V2EX  ›  Linux

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

  •  
  •   VgV · 2017-09-17 16:19:39 +08:00 · 3259 次点击
    这是一个创建于 2606 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #!/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 之前一直不成功。
    24 条回复    2017-09-17 23:49:17 +08:00
    VgV
        1
    VgV  
    OP
       2017-09-17 16:23:41 +08:00
    别说解析问题哦,我在测试机子的时候,用计划定时执行的,已经测试了几天了 SSH 一直没启动。
    我也以为是解析问题,之后我用 VNC 登录后 ping 了一下再执行就成功了,我一脸懵 b...
    Lpl
        2
    Lpl  
       2017-09-17 17:05:31 +08:00 via iPhone
    有调试么?比如在你不行的时候,status_code 是多少?
    VgV
        3
    VgV  
    OP
       2017-09-17 17:10:45 +08:00
    @Lpl 这真没有,用 crond 挂着定时,结果没执行,应该怎么看结果。echo 到文本里?
    keysona
        4
    keysona  
       2017-09-17 17:18:47 +08:00
    嗯,重定向到某个文件就可以看。

    * * * * * /your/script.sh > /var/log/xx.log 2>&1
    VgV
        5
    VgV  
    OP
       2017-09-17 17:25:12 +08:00   ❤️ 1
    @keysona 感谢,有个疑问 2 和 &1 代表什么,不太懂。
    azh7138m
        6
    azh7138m  
       2017-09-17 17:34:01 +08:00
    1 stdout
    2 stderr
    大概是这么个意思
    VgV
        7
    VgV  
    OP
       2017-09-17 17:38:31 +08:00
    现在不能重现之前的情况了,因为 ping 了,所以现在执行都是成功的。
    没 PING 之前我执行 sh 123.sh 没什么提示,PING 了之后,我再执行就有启动 SSH 提示了。
    VgV
        8
    VgV  
    OP
       2017-09-17 17:46:10 +08:00
    @azh7138m 谢谢解答,后面那个&1 是代表什么
    azh7138m
        9
    azh7138m  
       2017-09-17 17:49:58 +08:00
    把 2 重定向到 1,大概这么个意思
    charove
        10
    charove  
       2017-09-17 18:17:54 +08:00 via Android
    @VgV 2 是错误信息,1 是正确的输出结果,就是把这俩信息都输出
    Beebird
        11
    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
        12
    just1  
       2017-09-17 19:03:55 +08:00 via Android
    ping 完才成功就是解析问题
    VgV
        13
    VgV  
    OP
       2017-09-17 19:37:18 +08:00
    @charove 感谢解答。


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

    @aver4vex
    @Beebird
    @azh7138m
    @keysona
    @Lpl
    aver4vex
        17
    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
        18
    VgV  
    OP
       2017-09-17 20:48:49 +08:00
    /etc/init.d/sshd start
    centos6+原来要这样
    VgV
        19
    VgV  
    OP
       2017-09-17 20:50:58 +08:00
    @aver4vex 感谢,不过-c 1 就可以了吧.....
    Beebird
        20
    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
    VgV
        21
    VgV  
    OP
       2017-09-17 20:55:14 +08:00
    @Beebird 谢谢,涨知识了。
    我现在用 /etc/init.d/sshd start 这条命令能启动。6 以下应该都适用。
    Tink
        22
    Tink  
       2017-09-17 22:20:23 +08:00 via iPhone
    。。。
    Lpl
        23
    Lpl  
       2017-09-17 22:41:42 +08:00 via iPhone
    玩 cron 的时候有一些地方要注意
    比如所有路径都得是绝对路径,包括脚本里边的文件输出
    VgV
        24
    VgV  
    OP
       2017-09-17 23:49:17 +08:00
    @Lpl OK,明白了。嘿嘿。第一次搞这个。基本都是百度查资料。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1066 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:44 · PVG 03:44 · LAX 11:44 · JFK 14:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.