Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用flock的bash脚本失败_Bash_Ssh_Cron_Flock - Fatal编程技术网

使用flock的bash脚本失败

使用flock的bash脚本失败,bash,ssh,cron,flock,Bash,Ssh,Cron,Flock,我有一个任务:每十秒钟通过curl调用一个脚本 为此,我愿意: 创建bash脚本:admin\u cron.sh #!/bin/bash while :; do sleep 10 flock -n /var/www/admin/data/cron_lock -c \ 'curl -m 3 "http://url.com/?mod=kasdim_robot_cron&server=true"' & done 在crontab中添加规则: */1

我有一个任务:每十秒钟通过curl调用一个脚本

为此,我愿意:

  • 创建bash脚本:admin\u cron.sh

    #!/bin/bash
    while :; do
        sleep 10
        flock -n /var/www/admin/data/cron_lock -c \
            'curl -m 3 "http://url.com/?mod=kasdim_robot_cron&server=true"' &
    done
    
  • 在crontab中添加规则:

    */1 * * * * flock -n /var/www/admin/data/admin_lock -c /var/www/admin/data/admin_cron.sh
    
  • 因此,如果文件
    admin\u lock
    是免费的,cron将每分钟启动
    admin\u cron.sh
    。然后,如果
    admin\u cron.sh
    终止或死亡,
    admin\u cron.sh
    再次启动。没关系

    admin\u cron.sh
    尝试每隔10秒通过curl调用我的URL。卷曲的最长时间为3秒

    问题:当我开始工作时,每件事都能正常工作大约两到三天;之后,我在
    htop
    util中看到
    admin\u cron.sh
    是悬停过程:

  • 开始时间:

      CPU[                                                                             0.0%]   Tasks: 61, 53 thr; 1 running
      Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||461M/996M]   Load average: 0.44 0.83 0.94
      Swp[                                                                            0K/0K]   Uptime: 86 days, 18:43:58
    
      PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
      707 root       20   0 29600  2828  2512 S  0.0  0.3  1:27.18 ├─ /usr/sbin/cron -f
    22150 root       20   0 48868  2864  2416 S  0.0  0.3  0:00.00 │  └─ /usr/sbin/CRON -f
    22151 admin      20   0  4288   720   648 S  0.0  0.1  0:00.00 │     └─ /bin/sh -c flock -n /var/www/admin/data/admin_lock -c /var/www/admin/data/admin_cron.sh
    22156 admin      20   0 10044   816   728 S  0.0  0.1  0:00.00 │        └─ flock -n /var/www/admin/data/admin_lock -c /var/www/admin/data/admin_cron.sh
    22161 admin      20   0  4288   764   692 S  0.0  0.1  0:00.00 │           └─ /bin/sh -c /var/www/admin/data/admin_cron.sh
    22167 admin      20   0 11132  2896  2648 S  0.0  0.3  0:00.00 │              └+ /bin/bash /var/www/admin/data/admin_cron.sh
    
  • 一段时间后:

      CPU[|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]   Tasks: 64, 53 thr; 2 running
      Mem[||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||466M/996M]   Load average: 1.00 1.00 1.00
      Swp[                                                                            0K/0K]   Uptime: 86 days, 18:42:30
    
      PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
      707 root       20   0 29600  2828  2512 S  0.0  0.3  1:27.18 ├─ /usr/sbin/cron -f
    25818 root       20   0 48868  2864  2416 S  0.0  0.3  0:00.00 │  └─ /usr/sbin/CRON -f
    25819 admin      20   0  4288   752   676 S  0.0  0.1  0:00.00 │     └─ /bin/sh -c flock -n /var/www/admin/data/admin_lock -c /var/www/admin/data/admin_cron.sh
    25821 admin      20   0 10044   800   712 S  0.0  0.1  0:00.00 │        └─ flock -n /var/www/admin/data/admin_lock -c /var/www/admin/data/admin_cron.sh
    25824 admin      20   0  4288   788   716 S  0.0  0.1  0:00.00 │           └─ /bin/sh -c /var/www/admin/data/admin_cron.sh
    25825 admin      20   0 12636  4260  2552 R 98.7  0.4 60h56:25 │              └─ /bin/bash /var/www/admin/data/admin_cron.sh
    

  • 我的问题在哪里?

    为什么脚本在后台运行
    flock
    ?因为,我需要调用脚本并获取答案,然后再加上10秒再运行它。你不应该将
    curl
    的输出重定向到某个地方吗?你遇到的问题似乎是由于某种原因而跳过了
    睡眠。不知道为什么。为什么进程以98.7%的速度运行?在我的脚本中,可能有三个命令:sleep、flock和curl。其中之一是全部失败。哪个和为什么?