V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
beric
V2EX  ›  问与答

问下在crontab中执行命令的问题

  •  
  •   beric · 2014-01-20 15:56:00 +08:00 · 4093 次点击
    这是一个创建于 3754 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以下是crontab的配置
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/

    # For details see man 4 crontabs

    # Example of job definition:
    # .---------------- minute (0 - 59)
    # | .------------- hour (0 - 23)
    # | | .---------- day of month (1 - 31)
    # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
    # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # | | | | |
    # * * * * * user-name command to be executed
    # run-parts
    48 * * * * /alidata/server/php/bin/php /alidata/task/test.php

    /alidata/server/php/bin/php /alidata/task/test.php 这句为什么会不执行,而用SSH登陆执行就能,想问下CRONTAB配置需要注意哪些问题?
    17 条回复    1970-01-01 08:00:00 +08:00
    ijse
        1
    ijse  
       2014-01-20 17:04:06 +08:00
    好多环境变量会没有,执行下/etc/profile文件试试
    randal
        2
    randal  
       2014-01-20 17:17:34 +08:00
    打下日志就知道了
    macdino
        3
    macdino  
       2014-01-20 17:18:08 +08:00
    看执行权限
    awanabe
        4
    awanabe  
       2014-01-20 17:24:18 +08:00
    我调试的时候..设置接下去1分钟, 然后把 log >> 输出到一个文件...
    就可以知道哪里出问题了
    yangg
        5
    yangg  
       2014-01-20 20:13:13 +08:00
    环境变量
    yangg
        6
    yangg  
       2014-01-20 20:13:45 +08:00
    还有当前目录,
    beric
        7
    beric  
    OP
       2014-01-20 21:02:13 +08:00
    @ijse
    @randal
    @macdino
    @awanabe
    今天整了一天,权限啊,目录啊,都CHECK过了。日志的话看crontab的日志发现在启动时会有这句LOG: crond[14363]: (CRON) bad username (/etc/crontab)。不知道为什么会这样。看别人写的也是这样写的。然后我放在SHELL 脚本里也不能执行:即:php /alidata/task/test.php 也没任何报错什么的。(我是这样加的php /alidata/task/test.php >> test.log)就是不跑这句。然后其它我手动执行:php xxxx或那个脚本.sh也都是能跑的……真不知道还有哪里有问题了
    YouXia
        8
    YouXia  
       2014-01-20 21:12:19 +08:00 via Android
    试下crontab -u root -e root这个为对应的用户名。
    winix
        9
    winix  
       2014-01-20 21:24:05 +08:00
    "bad username" 多明确的错误提示。
    命令前少了用户名
    beric
        10
    beric  
    OP
       2014-01-20 21:35:49 +08:00
    @winix 48 * * * * /alidata/server/php/bin/php /alidata/task/test.php
    这样也少用户名?那应该怎样写呢?
    shiny
        11
    shiny  
       2014-01-20 21:42:16 +08:00
    @beric 很清楚了嘛,
    格式是:
    * * * * * user-name command to be executed
    所以你的可以改成
    48 * * * * root /alidata/server/php/bin/php /alidata/task/test.php

    也可以把 root 换成其他用户
    beric
        12
    beric  
    OP
       2014-01-20 21:45:43 +08:00
    @YouXia 好像也木有用
    beric
        13
    beric  
    OP
       2014-01-20 21:54:01 +08:00
    @shiny 是哦,但是这种写法参照网上的都要把ROOT去掉,如果不去掉反而会报这样的错误,但我刚才试了好像是OK,但是PHP还是不能执行……
    julyclyde
        14
    julyclyde  
       2014-01-21 22:44:27 +08:00 via iPad
    系统crontab带用户名字段;用户crontab不带
    beric
        15
    beric  
    OP
       2014-01-22 11:07:16 +08:00
    @julyclyde 啊,怎么分用户和系统的?
    julyclyde
        16
    julyclyde  
       2014-01-22 12:44:17 +08:00
    @beric /etc/crontab和/etc/cron.d/* 是系统的;用户的是crontab命令编辑的那个,保存在/var/spool/cron/下面
    man 5 crontab
    beric
        17
    beric  
    OP
       2014-01-22 13:51:33 +08:00
    @julyclyde 好的,谢谢,之前一直没有这样了解过, 我一般都是直接编辑 /etc/crontab 这个来使用的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2459 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:18 · PVG 21:18 · LAX 06:18 · JFK 09:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.