热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

crontab定时任务最佳实践

用crontab定时执行脚本时,可能存在没有设置环境变量的问题,也可能不是在脚本所在目录执行脚本,但写脚本引用文件时一般都用相对路径&#x

用crontab定时执行脚本时,可能存在没有设置环境变量的问题,也可能不是在脚本所在目录执行脚本,但写脚本引用文件时一般都用相对路径(相对于脚本所在目录)。
这些坑都可能导致正常的脚本在crontab环境下执行失败。
下面是一个提交crontab任务的脚本,可以自动设置环境变量和移动到脚本所在目录执行脚本:

#!/usr/bin/bash
# 此脚本帮助提交脚本任务,Usage: command.sh script.sh [arg1] [arg2] ...
# 注意单个参数不能有空格字符,否则会当做多个参数处理
#
# 此脚本会设置必要的环境变量,
# 然后移动到提交脚本的所在目录,以此作为当前目录执行脚本。
# chmod +x cur.sh
#
if [ "$1" = "" ]; thenecho 'Usage: command.sh script.sh [arg1] [arg2] ...' >&2exit 1
fi
. /etc/profilecur_file=$(basename $1)params=""
i=0
for param in "$@"; doif [ $i -gt 0 ]; thenparams=$params" "$paramfilet i++
done cur_dir=$(dirname $1)
cd ${cur_dir}script=`pwd`/${cur_file}
if [ ! "$params" = "" ]; thenscript=$script" "$params
fiecho -e "<&#61;&#61;&#61; $script &#61;&#61;&#61;> &#96;date &#39;&#43;%Y-%m-%d %H:%M:%S&#39;&#96;\n" | tr -s " " >&2
{ time $script; }

提交crontab任务时需要用上面的脚本提交&#xff1a;

0 * * * * /path/cur.sh /path/script.sh >> /path/file.log 2>&1

任务脚本只需要专注于处理业务逻辑&#xff0c;举例&#xff1a;

#!/usr/bin/bash
# chmod &#43;x script.sh
#
filename&#61;&#96;date &#39;&#43;%Y-%m-%d_%H:%M:%S&#39;&#96;spark-submit --master yarn --deploy-mode cluster \
--class com.abc.Aclass \
--jars mysql-connector-java-5.1.46-bin.jar \
--num-executors 10 \
--executor-cores 10 \
--executor-memory 9G \
etl.jar \
> log/${filename}.log 2>&1

script.sh脚本文件的输出需要在crontab -e中重定向到文件。
此外cur.sh脚本还会输出脚本的名称、启动时间和执行耗时&#xff0c;打印到标准错误。

转:https://www.cnblogs.com/xuejianbest/p/10285211.html



推荐阅读
author-avatar
2012张小雷_812
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有