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

cron 执行任务不成功

  •  
  •   aocif23 · 2017-11-08 11:23:37 +08:00 · 2797 次点击
    这是一个创建于 2564 天前的主题,其中的信息可能已经有所发展或是发生改变。
    vps 上 root 用户安装了程序 aa,并登陆 aa 的帐号(首次要登陆,以后不用登陆)

    直接登陆 vps 终端,root 用户下执行 aa --help | grep url >> /home/a/a.log 成功,测试好后把文件删除。
    再写在 crontab 里就执行失败了,虽然它建立了文件 /home/a/a.log ,但文件为空,意味着 cron 下执行的 aa 没有登陆,所以没有输出?

    另外测试了一下 cron 执行 whoami >> /home/a/ab.log ,看到 cron 的用户是 root

    怎么解决
    第 1 条附言  ·  2017-11-08 13:50:56 +08:00
    程序就是 openshift v3 的 oc,帖子里的命令是乱写的不用理会,登陆后它会建立配置目录 /root/.kube,里面有很多文件和目录,有一个文件里有登陆信息,包括用户名和 token 等
    第 2 条附言  ·  2017-11-08 14:32:23 +08:00
    路径问题,解决了
    15 条回复    2017-11-08 18:32:43 +08:00
    pq
        1
    pq  
       2017-11-08 11:32:44 +08:00
    如果这程序一定要用它自己的 uid 来运行的话,你得在系统级的 crontab 里指定 uid,或者干脆以这个 uid 登录后添加用户级 crontab。。。
    picone
        2
    picone  
       2017-11-08 11:48:04 +08:00
    计划任务改成 sudo -u aa 呗
    julyclyde
        3
    julyclyde  
       2017-11-08 13:35:15 +08:00
    联想能力真丰富,你怎么就“意味着没登录”了?
    你还没说你那个 aa 程序内是啥功能呢

    通过 geteuid、环境变量、getlogin、读 utmp 等方式获得到的身份信息 *不一定* 相同
    hugee
        4
    hugee  
       2017-11-08 13:37:32 +08:00 via Android
    chmod +x aa, 另外加上环境 path
    aocif23
        5
    aocif23  
    OP
       2017-11-08 13:47:10 +08:00
    @julyclyde
    程序就是 openshift v3 的 oc,帖子里的命令是乱写的不用理会,登陆后它会建立配置目录 /root/.kube,里面有很多文件和目录,有一个文件里有登陆信息,包括用户名和 token 等
    alvinbone88
        6
    alvinbone88  
       2017-11-08 14:17:16 +08:00
    直接用绝对路径来执行命令,就像这样:
    /path/to/aa --help | /path/to/grep url >> /home/a/a.log
    aocif23
        7
    aocif23  
    OP
       2017-11-08 14:31:52 +08:00
    @alvinbone88
    真的是路径问题,可是我已经在 /root/.bashrc 里添加了 path。。。
    julyclyde
        8
    julyclyde  
       2017-11-08 14:32:52 +08:00
    @aocif23 问题是那个文件是给 bash 用的,你这里并没有用到 bash 吧?
    tonghuashuai
        9
    tonghuashuai  
       2017-11-08 14:56:56 +08:00
    现在 shell 中执行保证没问题然后配置到 crontab,写 log 要这样

    xxx.sh >> log.txt 2>&1
    Cu635
        10
    Cu635  
       2017-11-08 15:02:22 +08:00
    @tonghuashuai
    后面的是把 stderr 重定向到 stdout,再将 stdout 的内容重定向到文件里。
    而很明显,lz 的问题是程序 aa 正常运行时有 stdout 输出的,但是在 cron 中连 stdout 输出都没有。所以你的说法不对。
    jasonyang9
        11
    jasonyang9  
       2017-11-08 15:04:37 +08:00
    是不是要改全局配置

    cat /etc/profile 看看

    vi /etc/profile.d/custom.sh
    加路径
    alvinbone88
        12
    alvinbone88  
       2017-11-08 15:37:31 +08:00
    @aocif23 #7 crontab 的 PATH 应该加在 /etc/crontab 中,直接在最前面加:
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    aocif23
        13
    aocif23  
    OP
       2017-11-08 16:21:15 +08:00
    @alvinbone88
    谢谢指点,以前不知道要写这里
    julyclyde
        14
    julyclyde  
       2017-11-08 17:58:24 +08:00
    @jasonyang9 profile 不是全局配置。Linux 里基本上没有“全局配置”这个概念
    profile 是给“登录 shell ”用的初始化文件
    tszyh
        15
    tszyh  
       2017-11-08 18:32:43 +08:00
    echo $PATH
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2560 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:32 · PVG 09:32 · LAX 17:32 · JFK 20:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.