crontab 踩过的坑

背景:crontab list 下面是定时执行的shell,shell里面是执行python文件

1.路径用全路径

2. 中文乱码

bash 执行shell 正常,放在crontab定时任务时,中文都显示为问号???
原因:因为Unix/Linux下使用crontab时的运行环境已经不是用户环境了,因此原本用户下的一些环境变量的设置就失效了
解决:网上查了很多,大多是先在linux输入echo $LANG,获取当前语言环境,在shell 前面导入相同的语言环境,我试了各种

.  /etc/profile
export LANG=zh_CN.UTF-8 
export LANG=zh_CN.gbk
export LANG=en_US.UTF-8
export LANG="en_US.UTF-8" //带引号的,不带引号的都试了,ps:shell等号两边无空格

还是乱码,折腾很久,终于搜索到需要添加

source ~/.bash_profile //(注意前面有一个点,此文件是隐藏文件)

因为通过ssh登录到服务器,手工执行脚本时,其间会自动执行root目录下的.bash_profile
参考链接:https://www.bbsmax.com/A/x9J2mOMgz6/

3.连接数据库出错

原因:crontab 的运行环境和当前用户登录进去的环境都是不同的,需要在运行 Python 脚本前重新设定一下运行的环境变量如 LD_LIBRARY_PATH source ./bashrc

bash 执行shell 正常,crontab报错
crontab 的日志(/var/log/cron)
/var/log/message

4.crontab -e 编辑后,需要保存退出后,才能生效

之前只保存,无退出,以为更改没有生效

5. 查找进程号

因为需要之前设置的每分钟执行定时,每个定时执行需要几个小时,现在没有用,需要kill 掉,ps -aux|grep shell文件名.sh ,查看进程号,kill -9 进程号,发现过几秒钟又有新的进程号在执行,ps -ef|grep 进程号,查找父进程好,kill -9 父进程号,发现还是会有新的进程号执行。干脆将shell中的执行py代码注释掉,只echo,ps -aux|grep shell文件名 查找不到执行shell 的进程号。虽然一直有echo输出,但是echo执行完,shell 立即关闭,时间太短,获取不到进程号,在shell 中,sleep,就可以查找进程号啦。
but 如何停止排队的定时,还是没有找到办法,请大家出点法子,谢谢!

6.变量尽量不要放在crontab -l,应该放在shell 里

在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’`。
之前传入的时间变量放在了错误的地方,又没有转义,定时不运行。

猜你喜欢

转载自blog.csdn.net/qq_43392533/article/details/84493781