crontab定时任务运行问题,求解答

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
qiangwushuang
帖子: 4
注册时间: 2015-03-16 18:10
系统: ubuntu

crontab定时任务运行问题,求解答

#1

帖子 qiangwushuang » 2017-09-26 23:09

Ubuntu-server,使用Ubuntu拨号。由于拨号时运营商会随机给内网或外网IP,于是写了个脚本检测当前IP如果IP为内网IP段则重新拨号。
脚本内容:

代码: 全选

#!/bin/bash
IP="0.0.0.0"

#循环
while :
do
        #获取IP
        IP=`ifconfig |grep -A1 "ppp0" |grep "inet" |awk -F . '{print $1}'|awk -F \: '{print $2}'`
        #检查IP是否为空
        if [ "${IP}" != "" ]
        then
                echo "IP head is $IP"
                #获取IP头是否正确
                if [ "$IP" != "100" ]
                then
                        echo "Finish,Exit!"
                        exit 0
                else
                        sleep 1
                        echo "No luck,clean up and retry!"
                        sleep 1
                        echo "Killing pppd process..."
                #       sudo killall pppd
                        sleep 2
                        echo "Clearing IP"
                        sleep 3
                #       pon dsl-provider
                        echo ""
                        IP=""
                        sleep 20
                fi
        else
                #sudo killall pppd
                sleep 5
                echo "run ppp"
                #pon dsl-provider
                sleep 20
                IP=""
        fi

done
将其加入到定时任务
*/1 * * * * /home/qiangwushuang/ppp/pppoe.sh >> /home/qiangwushuang/ppp/pppoe.log
但是当运行这个脚本的时候会重新启动一个cron进程。导致系统由两个定时任务的进程。 :Cry 改了一晚上都没有改好。。
定时任务执行前:
脚本运行前
脚本运行前
定时任务执行后:
脚本运行后
脚本运行后
并且使用ps -A|grep cron,显示也是两个进程。

我测试发现只要里面有while循环就会导致这个问题。
头像
九天星
帖子: 1440
注册时间: 2007-07-14 20:45

Re: crontab定时任务运行问题,求解答

#2

帖子 九天星 » 2017-09-27 12:00

&&

你缺少上述符号
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: crontab定时任务运行问题,求解答

#3

帖子 astolia » 2017-09-27 14:42

cron就是这么设计的。到点执行时,另外生成一个cron进程来处理事务。待执行的shell没有终止之前,生成的cron也不会退出。
贴一段systemctl status cron的记录

代码: 全选

● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-09-27 14:27:17 CST; 6min ago
     Docs: man:cron(8)
 Main PID: 654 (cron)
   CGroup: /system.slice/cron.service
           └─654 /usr/sbin/cron -f

Sep 27 14:27:17 xxx cron[654]: (CRON) INFO (pidfile fd = 3)
Sep 27 14:27:19 xxx cron[654]: (CRON) INFO (Running @reboot jobs)
Sep 27 14:30:01 xxx CRON[1903]: pam_unix(cron:session): session opened for user root by (uid=0)
Sep 27 14:30:01 xxx CRON[1904]: (root) CMD ([ -x /usr/sbin/dma ] && /usr/sbin/dma -q1)
cron的deamon进程id是654,到点后,创建一个新的cron进程,pid为1903,然后这个进程再去创建pid为1904的shell进程去执行具体的命令 [ -x /usr/sbin/dma ] && /usr/sbin/dma -q1
qiangwushuang
帖子: 4
注册时间: 2015-03-16 18:10
系统: ubuntu

Re: crontab定时任务运行问题,求解答

#4

帖子 qiangwushuang » 2017-09-27 15:57

astolia 写了:cron就是这么设计的。到点执行时,另外生成一个cron进程来处理事务。待执行的shell没有终止之前,生成的cron也不会退出。
贴一段systemctl status cron的记录

代码: 全选

● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2017-09-27 14:27:17 CST; 6min ago
     Docs: man:cron(8)
 Main PID: 654 (cron)
   CGroup: /system.slice/cron.service
           └─654 /usr/sbin/cron -f

Sep 27 14:27:17 xxx cron[654]: (CRON) INFO (pidfile fd = 3)
Sep 27 14:27:19 xxx cron[654]: (CRON) INFO (Running @reboot jobs)
Sep 27 14:30:01 xxx CRON[1903]: pam_unix(cron:session): session opened for user root by (uid=0)
Sep 27 14:30:01 xxx CRON[1904]: (root) CMD ([ -x /usr/sbin/dma ] && /usr/sbin/dma -q1)
cron的deamon进程id是654,到点后,创建一个新的cron进程,pid为1903,然后这个进程再去创建pid为1904的shell进程去执行具体的命令 [ -x /usr/sbin/dma ] && /usr/sbin/dma -q1
谢谢回复,测试了一下确实是这样。
qiangwushuang
帖子: 4
注册时间: 2015-03-16 18:10
系统: ubuntu

Re: crontab定时任务运行问题,求解答

#5

帖子 qiangwushuang » 2017-09-27 15:59

九天星 写了:&&

你缺少上述符号
这个符号加在哪里?这个应该是一条命令啊
tusheng
帖子: 741
注册时间: 2007-09-18 8:45

Re: crontab定时任务运行问题,求解答

#6

帖子 tusheng » 2017-10-04 14:46

qiangwushuang 写了:
九天星 写了:&&

你缺少上述符号
这个符号加在哪里?这个应该是一条命令啊
命令1 && 命令2 表示,命令1执行成功后,再执行命令2
回复