2015-10-28 3 views
0

Прежде всего я пробовал несколько решений. Я знаю, что есть несколько сообщений с похожими проблемами, ни одно из них не было решением для меня.AWS Linux crontab job не выполняет скрипт

У меня есть приложение Clojure, который начал использовать:

lein run -m tsdb-delete.core 

План состоит в том, чтобы выполнить это каждый день в полночь, я хочу, чтобы избежать использования библиотек хрон на основе Clojure, и это является очень легким применение веса.

Я создал следующий скрипт (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.sh и delete.sh расположен в /home/ec2-user/tsdb-delete/delete.sh

я добавил следующий мне кронтаб используя crontab -e

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 не создается.

Любые идеи?

+0

Вы можете запустить 'начать. sh' вручную как 'ec2-user'? Вы пробовали «Это все еще не работает!» команда из crontab [info page] (https://stackoverflow.com/tags/crontab/info)? (Изменено для установки каких-либо необходимых переменных среды, найденных в вашем резерве 'env'?) –

+0

вы можете запустить /home/ec2-user/tsdb-delete/start.sh> /var/tmp/tsdb-delete.out вручную? угадать вопрос о разрешении – Mircea

ответ

0

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 принимают шестой аргумент, который является пользователем.

Это также плохая форма, чтобы использовать что-то вроде sudo в cron и, как правило, с помощью пользователя cron (crontab -e) не очень дружелюбно относится к управлению конфигурацией. Вышеупомянутые проблемы устраняются.Тем не менее, я бы рекомендовал переместить сценарий в более безопасное место (так как он работает через корень), и так как это корень можно легко отправлять данные /var/log/ (и добавить его):

*/5 * * * * root /opt/tsdb-delete/start.sh >> /var/log/tsdb-delete.out 
Смежные вопросы