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

crontab 不执行问题,网上找了一个小时都没找到解决方法,醉了

  •  
  •   Hopetree ·
    Hopetree · 2018-04-21 17:14:27 +08:00 · 11273 次点击
    这是一个创建于 2403 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说我的系统,是 Ubuntu 16.04

    然后我要运行一个定时任务,所以为了测量定时任务是否执行,先运行一个最基本的测试,但是发现根本没运行。

    我的做法:

    • 使用 crontab -e 进行编辑模式,然后写入代码如下:
    1 * * * * echo 111 >> /home/alex/Desktop/mycodes/k.txt
    
    • 查看定时任务 crontab -l 可以看到跟我编辑的一模一样的结果
    • 然后我重启 cron 服务,使用如下命令:
    service cron restart
    

    但是我发现这个定时任务并没有启动啊

    而且我还发现,网上都是说 crond,但是我把 cron 改成 crond 就报错,根本没有这个服务,请问我哪里没有作对?

    贴一下 /var/log/cron.log 的日志:

    Apr 21 17:04:01 VirtualBox crontab[6460]: (alex) BEGIN EDIT (alex)
    Apr 21 17:05:18 VirtualBox crontab[6460]: (alex) END EDIT (alex)
    Apr 21 17:05:23 VirtualBox crontab[6473]: (alex) LIST (alex)
    Apr 21 17:07:04 VirtualBox cron[6489]: (CRON) INFO (pidfile fd = 3)
    Apr 21 17:07:04 VirtualBox cron[6489]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
    Apr 21 17:08:41 VirtualBox cron[6510]: (CRON) INFO (pidfile fd = 3)
    Apr 21 17:08:41 VirtualBox cron[6510]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
    Apr 21 17:10:07 VirtualBox crontab[6526]: (alex) LIST (alex)
    Apr 21 17:10:44 VirtualBox crontab[6534]: (alex) BEGIN EDIT (alex)
    Apr 21 17:11:01 VirtualBox crontab[6534]: (alex) END EDIT (alex)
    
    
    42 条回复    2018-04-23 15:45:23 +08:00
    tradzero
        1
    tradzero  
       2018-04-21 17:19:42 +08:00
    ubuntu 16.04 确实是 cron 我也被坑了
    Hopetree
        2
    Hopetree  
    OP
       2018-04-21 17:24:26 +08:00
    @tradzero 然而我看网上大部分都是在说 crond,而且我查 cron 和 crond 的关系居然还没查到,这些都不是关键,关键是,我这样设置定时任务为什么不执行?
    aheadlead
        3
    aheadlead  
       2018-04-21 17:24:31 +08:00
    “ 1 * * * *” 的 1 是啥意思?
    20has
        4
    20has  
       2018-04-21 17:24:43 +08:00 via Android
    我说下你的问题,
    1 日志不排版看的累
    2 定时任务最好放脚本
    3 造成原因或许是无权限写入或者该文件( k.txt )未先创建!
    wdd2007
        5
    wdd2007  
       2018-04-21 17:26:00 +08:00   ❤️ 1
    你 * * * * * 测试一下。

    你用 1 * * * * 不得一个小时才能有结果。
    20has
        6
    20has  
       2018-04-21 17:26:29 +08:00 via Android
    @aheadlead 每小时的第 1 分钟执行😂😂
    应该是*/1 把 每分钟执行一次
    zw
        7
    zw  
       2018-04-21 17:41:15 +08:00
    Ubuntu 不是基于 Debian 的么?我看到在 Debian 里,都是把脚本放到 /etc/cron.hourly/目录下即可。。。
    abmin521
        8
    abmin521  
       2018-04-21 17:51:36 +08:00 via Android   ❤️ 1
    echo 写绝对路径
    defunct9
        9
    defunct9  
       2018-04-21 17:54:54 +08:00 via iPhone   ❤️ 1
    开 ssh,我也不上去看
    DANG
        10
    DANG  
       2018-04-21 18:05:57 +08:00
    每个分钟数为 1 的时候执行
    blankme
        11
    blankme  
       2018-04-21 18:08:17 +08:00 via Android
    5 楼正解
    flytiger3768
        12
    flytiger3768  
       2018-04-21 18:09:51 +08:00
    crontab -e 不需要重启 crond。你这个设置的是每个小时的第 1 分钟开始执行,如 0 点 1 分、1 点 1 分、2 点 1 分。参考 @20has 的回答修改设置
    Cbdy
        13
    Cbdy  
       2018-04-21 18:21:10 +08:00 via Android
    systemd timer 了解一下
    ThirdFlame
        14
    ThirdFlame  
       2018-04-21 18:34:45 +08:00
    每小时第 1 分钟。 找了一个小时 ,回来一看 刚刚好执行啊
    yingfengi
        15
    yingfengi  
       2018-04-21 19:20:32 +08:00 via Android
    目测服务并没有自启动,我遇到过这种坑。帮瓦工的乌班图就这样。
    yingfengi
        16
    yingfengi  
       2018-04-21 19:22:06 +08:00 via Android   ❤️ 1
    Hopetree
        17
    Hopetree  
    OP
       2018-04-21 19:34:59 +08:00
    @aheadlead 哈哈哈,我蠢了,我以为 1 就是表示每 1 分钟执行一次
    @wdd2007 原来问题都处在我设置的时间上面,这个是 1 小时,我一直以为是 1 分钟
    @20has 是我把时间搞错了,刚接触这个定时任务,一直理解错了时间
    @ThirdFlame 真的如你所说,一个小时之后我的任务执行了,好囧啊
    artandlol
        18
    artandlol  
       2018-04-21 19:42:02 +08:00 via iPhone
    不要-e 直接改配置文件
    zhicheng
        19
    zhicheng  
       2018-04-21 19:45:12 +08:00 via iPhone
    环境变量
    torbrowserbridge
        20
    torbrowserbridge  
       2018-04-21 19:47:19 +08:00 via Android
    改完并不需要 restart crond
    chanssl
        21
    chanssl  
       2018-04-21 20:21:02 +08:00   ❤️ 2
    推荐这个工具
    https://tool.lu/crontab/
    TheKiller
        22
    TheKiller  
       2018-04-21 20:22:28 +08:00 via iPhone
    不执行九成是环境变量的问题
    Nick2VIPUser
        23
    Nick2VIPUser  
       2018-04-21 20:22:56 +08:00 via iPhone
    同样的程序换一台机器试一下
    infun
        24
    infun  
       2018-04-21 20:22:56 +08:00 via iPhone
    @yingfengi 我也是,然后查了一会没找到问题,一气换装了 centOS
    Hopetree
        25
    Hopetree  
    OP
       2018-04-21 20:38:07 +08:00
    @chanssl 厉害了,工具很实用,我刚才写了一个以为是每天 3 点执行,然后用这个工具才发现是 3 点的每 1 分钟执行一次,然后改了过来,挺好的,可以帮助理解
    Hopetree
        26
    Hopetree  
    OP
       2018-04-21 20:38:38 +08:00
    @torbrowserbridge 好的,感谢,刚开始用这个功能不熟悉,感谢各位支招
    Hopetree
        27
    Hopetree  
    OP
       2018-04-21 20:41:16 +08:00
    我还发现了一个问题,就是运行用 sh 来运行 Python 代码然后设置成定时任务的时候,sh 中要把 python 的绝对地址放上去才行,比如下面这种:

    ```
    #!/usr/bin/bash
    cd /home/alex/Desktop/mycodes
    /usr/bin/python3 timer_test.py
    ```
    xratzh
        28
    xratzh  
       2018-04-21 20:46:10 +08:00
    *和*/1 和 1 的不一样哈哈哈
    lhpshaohan4
        29
    lhpshaohan4  
       2018-04-21 20:54:17 +08:00 via iPhone
    /etc/pam.d/crond
    #session required pam_loginuid.so #注释此行
    fantastM
        30
    fantastM  
       2018-04-21 22:08:08 +08:00
    lance6716
        31
    lance6716  
       2018-04-22 01:04:06 +08:00 via Android
    @Hopetree 孔乙己:shell 有四种登录方式
    q397064399
        32
    q397064399  
       2018-04-22 11:52:16 +08:00
    :doge:
    q397064399
        33
    q397064399  
       2018-04-22 11:52:51 +08:00

    关爱楼主
    yujieyu7
        34
    yujieyu7  
       2018-04-22 13:51:54 +08:00 via iPad
    已经歪成搞笑贴了,楼主还是要细心点啊😄
    8bit
        35
    8bit  
       2018-04-22 14:19:26 +08:00 via Android
    :doge
    :doge:
    ls2110609
        36
    ls2110609  
       2018-04-22 16:44:37 +08:00
    ...多看书不好吗
    Hopetree
        37
    Hopetree  
    OP
       2018-04-22 20:44:59 +08:00
    @lance6716
    @fantastM
    @q397064399
    @ls2110609
    好的,是我开始没有理解这个时间设置,现在时间问题我已经搞清楚了,然后另外一个问题有点疑问,就是如果用脚本执行文件的时候,比如用 shell(或者 Python 脚本)来写文件,这个文件的地址可以是相对路径,直接执行 shell (或者 Python )可以成功,但是如果把这个 shell ( Python 脚本)设定成定时任务就发现文件不会在指定地方生成(我不确定是不是生成到其他地方去了),所以,我只能把所有涉及到文件的地方都写成绝对路径,即使这个文件是在 Python 脚本中的页写成绝对路径,请问,我这种做法是唯一的解决方法吗?
    lance6716
        38
    lance6716  
       2018-04-23 09:20:44 +08:00 via Android
    @Hopetree 你只需要导入$HOME/.profile 或者 bashrc 那些配置就好
    balamiao
        39
    balamiao  
       2018-04-23 11:19:51 +08:00
    额,ubuntu 表示不背这个锅~
    ThirdFlame
        40
    ThirdFlame  
       2018-04-23 12:48:12 +08:00
    @Hopetree
    #!/bin/bash
    cd 路径
    python a.py
    Hopetree
        41
    Hopetree  
    OP
       2018-04-23 13:14:26 +08:00
    @ThirdFlame 不行,这样写不行,python 要改成 /usr/bin/python3 才行,不然运行不了
    kidtest
        42
    kidtest  
       2018-04-23 15:43:06 +08:00
    @Hopetree 涉及到路径的,全部写成绝对路径,包括要执行的脚本里面的路径
    Hopetree
        43
    Hopetree  
    OP
       2018-04-23 15:45:23 +08:00
    @kidtest 是的,我目前就是这样做的,特别是写的 python 代码,里面的地址经常忘了写成绝对路径,所以我才问有没有其他的方法可以不用这样麻烦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5481 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:44 · PVG 14:44 · LAX 22:44 · JFK 01:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.