crontab定时任务不执行,单独运行sh生效
虽然已经从事运维两三年了。 但是今天写的计划任务没有执行,排除了下, 这里整理下,方便后期查看。
排除思路
1. 确保crond服务是开机自启和当前是启动的。
# centos
systemctl status crond
systemctl start crond # centos ,
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..0_191/bin:/usr/local/java/jdk1..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.
* * * * 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
crontab定时任务不执行,单独运行sh生效的更多相关文章
- crontab定时任务不执行的原因
1.重启crontab若是遇见"You (cloudlogin) are not allowed to use this program (crontab) ...
- linux crontab定时任务不执行
如crontab 没有成功,检测crontab 服务是否启动, /etc/init.d/crond status 查看crond状态 /etc/init.d/crond restart 重启crond ...
- 如何查看crontab定时任务是否执行过 查看记录
命令的模式像下面这个: grep "script.php" /path/file.ext. 比如,下面的命令就是从/var/log/cron.log 检测cron任务是否有执行 c ...
- 【转】crontab定时任务中文乱码问题
转载:http://blog.163.com/rettar@126/blog/static/1216503422012135511740/ 手动执行都很正常的的脚步,添加到定时任务中一直执行失败,日志 ...
- Crontab无法自动执行,直接运行脚本却能执行
Crontab无法自动执行,直接运行脚本却能执行 http://bbs.chinaunix.net/thread-1926428-1-1.html crontab -e crontab内容为* * * ...
- Linux命令之Crontab定时任务,利用Crontab定时执行spark任务
Linux命令之Crontab定时任务,利用Crontab定时执行spark任务 一.Linux命令之Crontab定时任务 1.1 常见Crontab任务 1.1.1 安装crontab 1.1.2 ...
- 如何让linux定时任务crontab按秒执行
如何让linux定时任务crontab按秒执行? linux定时任务crontab最小执行时间单位为分钟如果想以秒为单位执行,应该如何设置呢?思路 正常情况是在crontab中直接定义要执行的任务,现 ...
- scrapy使用crontab定时任务不能自动执行的调试
在用crontab进行定时任务时,发现任务并没有执行.而手动bash yourshell.sh时可以正常的执行程序.以下是个人的解决流程. 一.将错误打印打out.log */10 * * * * b ...
- 对于crontab定时任务不能自动执行的总结
最近遇到了一些sh不能在crontab定时任务中自动执行的问题 期间由于不太了解,故走了一点弯路,现在总结下来可能第一次 进行设置遇到的问题.以绝后患!我所用过的操作系统为HP-unix&li ...
随机推荐
- C++ CGI报“资源访问错误”问题分析
一线上CGI偶发性会报“资源访问错误”,经过分析得出是因为CgiHost没有读取到CGI的任务输出,即CGI运行完成后连HTTP头都没有一点输出. 然而实际上,不可能没有任何输出,因为CGI至少有无条 ...
- PATA1082Read Number in Chinese
有几点需要注意的地方一是将right转化为与left在在同一节 while (left + 4 <= right) { right -= 4;//每次将right移动4位,直到left与righ ...
- ORA-01950:对表空间“”XXXX”无权限,解决办法
上图报错 解决方案比如你要在用户(或SCHEMA)usera中建表,那么你用SYSTEM登录ORACLE后,执行如下SQL : ALTER USER 用户名 QUOTA UNLIMITED ON 表空 ...
- iptables 数据走向流程
链的规则存放于哪些表中(从链到表的对应关系): PREROUTING 的规则可以存在于:raw表,mangle表,nat表. INPUT 的规则可以存在于:mangle表,filter表,(cento ...
- 图解 Java 垃圾回收机制,写得非常好!
阅读本文大概需要 3.7 分钟. 翻译:Rhys_Lee, AzureSora, 溪边九节, 小小菜鸟鸡 blog.csdn.net/zl1zl2zl3/article/details/9090408 ...
- 2019-2020-1 20181218《Linux内核原理与分析》第一周作业
目录 问题和参考 有趣/有用的Linux命令 小作业和解答 一些图片 相关学习 本文是学习Linux基础入门(新版)后的总结. 问题和参考 虚拟机莫名崩溃,一天重启了几十次电脑,重装两次系统,心累.想 ...
- python发展
python的创始人---吉多·范罗苏姆(Guido van Rossum)
- 01.普通抖音新手如何从0开始入门3个月做到粉丝100w+
普通抖音新手如何从0开始入门3个月做到粉丝100w+ 今年以来,明显感觉抖音很火,大有干掉微信,取代淘宝,京东的感觉,如今年轻人,一周7天有7天要玩抖音,所以说未来不可估量. 如是,2019春节以后, ...
- 命名法:骆驼(Camel)、帕斯卡(pascal)、匈牙利(Hungarian)、下划线(_)
首先欢迎大家到来! 常用的命名法:骆驼(Camel).帕斯卡(pascal).匈牙利(Hungarian).下划线(_) 骆驼:是指混合使用大小写字母来构成变量和函数的名字 帕斯卡:与骆驼命名法类似只 ...
- 左倾红黑树——左倾2-3树(不是jdk1.8的TreeMap的红黑树)
public class RBTree<K extends Comparable<K>, V> { public static boolean RED = true; publ ...