crontab定时任务不执行,单独运行sh生效
虽然已经从事运维两三年了。 但是今天写的计划任务没有执行,排除了下, 这里整理下,方便后期查看。
排除思路
1. 确保crond服务是开机自启和当前是启动的。
# centos 7 systemctl status crond systemctl start crond # centos 5,6 service crond status chkconfig crond on
2. 检查mail邮件里面关于该计划任务的错误信息。
这里借用下网络上面的图过来下,
这个情况,一般这些环境配置在profile文件中的, 可以在脚本中source下这个文件, 让其生效,或者把对应的配置写到脚本里面来。
source /etc/profile
3. 脚本里面的命令程序没有在PATH里面。
脚本里面执行的命令,没有在计划任务执行的环境变量里面有, 需要添加进path或者命令写全路径。
# 在可以执行的终端内获取所有PATH, 写入脚本中 echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/php/bin:/usr/local/docker/bin:/usr/local/java/jdk1.8.0_191/bin:/usr/local/java/jdk1.8.0_191/jre/bin:/usr/local/flume/bin:/usr/local/go/bin:/usr/local/go/bin:/root/bin #在执行脚本中加入如下类似行 PATH=/usr/local/bin:$PATH
4. 使用bash替换
使用crontab -e编辑的计划配置行中, 命令是有限制的, 重定向和特殊符号是不支持的, 这些是bash提供的,可以使用如下方式配置。
# add by zhaojiedi 2019.08.30 14 * * * * bash /usr/local/bin/backup_k8s.sh
5. 封装下计划任务脚本行
我们在计划任务行,写的命令如果长并且带有一些date命令等, 建议把这些命令写入到一个新的文件里面去, 计划任务命令行写这个新的文件作为命令执行。
# 原来计划任务行 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh # 改写后的 echo "cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh" > /usr/local/bin/top10.sh * * * * * bash /usr/local/bin/top10.sh
最后放一个完整点的计划任务脚本
#!/bin/bash source /etc/profile PATH=/usr/local/bin:$PATH base_dir=/alidata/k8s_backup dt=$(date "+%F/%T") cmd_history_file="/usr/local/limikeji/bin/cmd_history.txt" # 先处理有命名空间的 kubectl api-resources |grep true |awk 'BEGIN {OFS=" "; FIELDWIDTHS="34 13 31 13 50"}{if (NR >1)print $5,$1,$4,$3}' |while read kind name has_namespace group ; do #echo "$kind $name $has_namespace $group" api_path="$kind" cmd="kubectl get $api_path --all-namespaces -ocustom-columns=name:.metadata.name,namespace:.metadata.namespace" $cmd | awk '{if(NR>1)print $0}' |while read record_name ns ; do file="$base_dir/$dt/$ns/$api_path/${record_name}.yml" mkdir -pv $(dirname $file) cmd="kubectl -n $ns get $api_path/$record_name -oyaml " echo $cmd >>$dt_$cmd_history_file $cmd > $file done done # 后处理无命名空间的 kubectl api-resources |grep false |awk 'BEGIN {OFS=" "; FIELDWIDTHS="34 13 31 13 50"}{if (NR >1)print $5,$1,$4,$3}' |while read kind name has_namespace group ; do #echo "$kind $name $has_namespace $group" api_path="$kind" cmd="kubectl get $api_path -ocustom-columns=name:.metadata.name" $cmd | awk '{if(NR>1)print $0}' |while read record_name ; do file="$base_dir/$dt/NONENAMESPACE/$api_path/${record_name}.yml" mkdir -pv $(dirname $file) cmd="kubectl get $api_path/$record_name -oyaml " echo $cmd >>$dt_$cmd_history_file $cmd > $file done done
标签:
linux
posted on 2019-08-31 09:32 LinuxPanda 阅读(18360) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2017-08-31 scrapy爬虫学习系列五:图片的抓取和下载