【问题标题】:AWS Linux crontab job isnt executing scriptAWS Linux crontab 作业未执行脚本
【发布时间】:2016-01-28 04:18:33
【问题描述】:

首先,我尝试了多种解决方案,我知道有几篇帖子有类似的问题,这些都不是我的解决方案。

我有一个 Clojure 应用程序,它开始使用:

lein run -m tsdb-delete.core

计划是每天午夜执行,我想避免使用基于 Clojure 的 cron 库,这是一个非常轻量级的应用程序。

我创建了以下脚本 (start.sh):

/usr/bin/lein run -m tsdb-delete.core

在运行时调用此脚本 (delete.sh):

#!/bin/bash
echo "Deleting:" $1
OUTPUT="$(sudo /opt/opentsdb/build/tsdb scan --delete 30d-ago 7d-ago sum $1)"
echo "${OUTPUT}"

如果我手动调用“./start.sh”,一切都会按预期工作,我会看到控制台输出。

start.sh 位于 /home/ec2-user/tsdb-delete/start.shdelete.sh 位于 /home/ec2-user/tsdb-delete/delete.sh

我使用crontab -e 向我的 crontab 添加了以下内容

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ec2-user/bin
SHELL=/bin/bash
*/5 * * * * /home/ec2-user/tsdb-delete/start.sh > /var/tmp/tsdb-delete.out
* * * * * env > /tmp/env.output

* * * * * env > /tmp/env.output用于调试,env.output的内容如下:

SHELL=/bin/bash
USER=ec2-user
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ec2-user/bin
PWD=/home/ec2-user
LANG=en_GB.UTF-8
SHLVL=1
HOME=/home/ec2-user
LOGNAME=ec2-user
_=/bin/env

如果我自己在终端中运行env,我会得到以下信息:

HOSTNAME=ip-xx-xx-xx-xx
LESS_TERMCAP_md=
LESS_TERMCAP_me=
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=xxxxxxxxx
LESS_TERMCAP_ue=
SSH_TTY=/dev/pts/0
USER=ec2-user
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
LESS_TERMCAP_us=
MAIL=/var/spool/mail/ec2-user
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ec2-user/bin
PWD=/var/tmp
LANG=en_GB.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/ec2-user
LOGNAME=ec2-user
SSH_CONNECTION= xxxxxxx
LESSOPEN=||/usr/bin/lesspipe.sh %s
LESS_TERMCAP_se=
_=/bin/env
OLDPWD=/home/ec2-user

关键环境属性似乎匹配,在var/cron/log 我看到以下内容:

Oct 28 11:45:01 ip-xx-xx-xx-xx CROND[23591]: (ec2-user) CMD (/home/ec2-user/tsdb-delete/start.sh > /var/tmp/tsdb-delete.out)
Oct 28 11:45:01 ip-xx-xx-xx-xx CROND[23592]: (ec2-user) CMD (env > /tmp/env.output)

/var/spool/mail/ 中,我没有看到任何错误消息被抛出并且文件/var/tmp/tsdb-delete.out 没有被创建。

有什么想法吗?

【问题讨论】:

  • 您可以手动运行start.shec2-user?您是否尝试过“它仍然不起作用!”来自 crontab 的命令 info page? (修改为设置在您的env 转储中找到的任何必要的环境变量?)
  • 你可以手动运行 /home/ec2-user/tsdb-delete/start.sh > /var/tmp/tsdb-delete.out 吗?猜测权限问题

标签: linux amazon-web-services cron crontab


【解决方案1】:

sudo 需要一个 tty,在运行 cron 时它不存在。 (1,2)

这里有一个更好的解决方案;把它放在/etc/cron.d/tsdb-delete:

*/5 * * * * root /home/ec2-user/tsdb-delete/start.sh > /var/tmp/tsdb-delete.out

这需要在start.sh 上设置执行位。另请注意,/etc/cron 条目采用第六个参数,即用户。

在 cron 中使用 sudo 之类的东西也是不好的形式,而且通常使用用户 cron (crontab -e) 对配置管理不是非常友好。以上解决了这些问题。尽管如此,我还是建议将脚本移动到更安全的位置(因为它是通过 root 运行的),并且由于它是 root,您可以轻松地将输出发送到 /var/log/(并附加它):

*/5 * * * * root /opt/tsdb-delete/start.sh >> /var/log/tsdb-delete.out

【讨论】:

    猜你喜欢
    • 2011-07-26
    • 1970-01-01
    • 2020-06-19
    • 2015-12-04
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多