AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1130010
Accepted
djsony90
djsony90
Asked: 2019-03-31 13:23:03 +0800 CST2019-03-31 13:23:03 +0800 CST 2019-03-31 13:23:03 +0800 CST

Cronjob 每 1445 分钟

  • 772

首先,对不起我的英语不好。我是 Crontab 的新手,我正在制定一些时间表。我正在用 Python 从互联网上抓取一些数据,我有这个网站,当你抓取一些数据时,你必须等待 24 小时才能获取下一部分数据,所以如果我的 cronjob 每天从 00.00 开始,它需要一些运行 Selenium 并抓取数据的秒数。第二天必须以几秒钟的偏移量运行,以确保从我进行抓取的那一刻起 24 小时内完成,而不是从工作开始的那一刻起 24 小时内完成。那么,有什么方法可以每天运行作业,比前一天延迟 5 分钟,或者我需要在 python 脚本中做一些每天睡得更久的东西。

对不起,很长的帖子

suspend cron schedule python3
  • 3 3 个回答
  • 180 Views

3 个回答

  • Voted
  1. Best Answer
    Rinzwind
    2019-03-31T14:27:11+08:002019-03-31T14:27:11+08:00

    或者我需要在 python 脚本中做一些每天睡得更久的东西。

    应该是最简单的。cron 无法处理变量的时间。at当您需要启动脚本时,该命令要灵活得多。你需要一个脚本来执行

    at midnight + 1 minute < {script}
    

    1 是您根据开始日期增加的变量(第 1 天为 +1 分钟,第 2 天为 +2 分钟等)。请注意,您在某些时候会遇到麻烦:在 60 * 24 = 1440 天内,您会让您跑过下一个午夜。将该脚本添加到您的 cron。

    您还可以at -t在其中设置一个时间,使其成为不需要 cron 的正常命令:

    at -t 201903300000
    at -t 201903310001    
    at -t 201903010002
    ...
    at -t 201912310410 
    

    (2019 年 3 月 30 日 0:00,31.3 0:00 过去 1 分钟,1.4 0:00 过去 2 分钟等)

    • 3
  2. PerlDuck
    2019-04-01T04:14:51+08:002019-04-01T04:14:51+08:00

    实现目标的另一种可能方法是使用systemd 计时器单元 和服务单元而不是cronjob。

    文件/etc/systemd/system/my-script.timer:

    [Unit]
    Description=Timer for MyScript
    
    [Timer]
    OnBootSec=2min
    OnUnitInactiveSec=1day 5min
    
    [Install]
    WantedBy=multi-user.target
    

    文件/etc/systemd/system/my-script.service:

    [Unit]
    Description=MyScript
    
    [Service]
    Type=oneshot
    ExecStart=/path/to/my-script.sh
    

    然后运行以下命令:

    sudo systemctl daemon-reload
    sudo systemctl enable --now my-script.timer
    

    这将启用(=启动时自动启动)计时器单元并立即启动它。

    my-script定时器单元控制服务单元,即:系统启动后2分钟启动同名服务单元(不活动(=已停止)。

    如果启动时间超过 2 分钟,则立即激活计时器。

    请注意,服务单元将以用户root身份运行。要更改它,请将User=属性添加到服务单元:

    [Unit]
    Description=MyScript
    
    [Service]
    Type=oneshot
    User=djsony90
    ExecStart=/path/to/my-script.sh
    

    要检查状态,请发出:

    systemctl status my-script.{timer,service}
    ● my-script.timer - Timer for MyScript
       Loaded: loaded (/etc/systemd/system/my-script.timer; enabled; vendor preset: enabled)
       Active: active (waiting) since Sun 2019-03-31 13:47:29 CEST; 19min ago
      Trigger: Mon 2019-04-01 13:52:59 CEST; 23h left
    
    Mar 31 13:47:29 host systemd[1]: Started Timer for MyScript.
    
    ● my-script.service - MyScript
       Loaded: loaded (/etc/systemd/system/my-script.service; static; vendor preset: enabled)
       Active: inactive (dead) since Sun 2019-03-31 13:47:59 CEST; 18min ago
      Process: 22833 ExecStart=/home/pduck/my-script.sh (code=exited, status=0/SUCCESS)
     Main PID: 22833 (code=exited, status=0/SUCCESS)
    
    Mar 31 13:47:29 host systemd[1]: Starting MyScript...
    Mar 31 13:47:59 host systemd[1]: Started MyScript.
    

    在这里我们可以看到定时器单元已启用(意味着它将在启动时启动)并且当前正在等待 19 分钟。服务单元将Mon 2019-04-01 13:52:59 在大约 23 小时。服务单元当前处于非活动状态。(我的测试脚本 ,my-script.sh只是做了一个sleep 30。)我们还可以看到服务单元是不活动的,因为Sun 2019-03-31 13:47:59。加上 1 天 5 分钟就可以准确Mon 2019-04-01 13:52:59得出计时器单元的触发时间。

    进一步阅读:

    • 服务单位
    • 定时器单元
    • 系统化一般
    • 3
  3. Ray Butterworth
    2019-04-01T05:10:59+08:002019-04-01T05:10:59+08:00

    您可以简单地运行一个持久的 bash 脚本,而不是使用 cron,该脚本在每次调用您的程序后会休眠一天零十秒:

    #/bin/bash
    
    while true
    do
        ### invoke your program here ###
        sleep 1d 10s
    done
    
    • 1

相关问题

  • 混合动力在哪里暂停?

  • 如何每 5 秒运行一次脚本?

  • 如何让我的电脑中的风扇在暂停时关闭?[关闭]

  • 如何使 cron 电子邮件成为我的 @gmail 帐户

  • 为什么我的 Kubuntu 会话在恢复后需要相当长的时间才能响应?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve