当前位置: 首页 > news >正文

crontab 执行脚本报错,手动执行脚本正常的解决方法

一、出现的问题

有一个守护脚本XXX.sh,需要使用oracle用户在linux上配置定时任务,每1分钟检查执行一次。但是发现该脚本使用oralce用户手动启动没问题,能正常把程序启动起来,而使用crontab并没有把程序启动起来。

二、排查分析问题

1.程序本身是否有问题

通过使用nohup命令,发现程序能够正常执行,说明程序本身没有问题。

2.脚本是否有问题

既然能手动执行脚本,把程序启动起来,说明脚本本身没有问题。

3.定时任务是否有问题

编辑定时任务
crontab -e

*/1 * * * * sh /home/oracle/XXX.sh > /tmp/test.log

在XXX.sh中加了一些打印,定时任务重定向输出到test.log,通过查看test.log日志,如果有输出就说明执行了XXX.sh 脚本。

4.定时任务执行脚本时启动程序是否有问题

在XXX.sh脚本中,加一下启动程序 标准错误重定向到标准输出的日志。

nohup  XXXXX > test2.log 2>&1 &

通过查看 test2.log 日志发现报了没有加载到动态库的错误:

error while loading shared libraries: libocci.so.19.1:cannot open shared object file: No such file or directory

按道理讲,用oracle用户启动怎么会加载不到libocci.so动态库呢?很是郁闷。。。后来排查到是因为crontab执行的并非当前用户的环境。

三、原因和解决办法

1.原因

没有加载到动态库的原因是crontab 执行任务的时候,并不会缺省的从用户profile文件中读取环境变量参数。从而导致定时任务执行脚本启动程序的时候报错。

2.解决办法

在脚本的开头加上如下两句,让脚本执行环境是当前账户的配置文件。

#!/bin/sh
. /etc/profile
. ~/.bash_profile

参考文章:
Linux 中 Crontab 执行时的环境变量问题
Linux 指定用户执行 crontab 计划任务

http://www.lryc.cn/news/18003.html

相关文章:

  • 扎心话题 | 设计院背后的潜规则你知道吗?
  • 【JavaEE初阶】第二节.多线程( 进阶篇 ) 锁的优化、JUC的常用类、线程安全的集合类
  • 大数据核心技术是什么
  • 「TCG 规范解读」初识 TPM 2.0 库续一
  • task与function
  • Android 基础知识4-3.1 TextView(文本框)详解
  • 点击化学 PEG 试剂1858242-47-3,Propargyl丙炔基-PEG1-乙酸活性酯
  • 正则表达式是如何运作的?
  • JVM参数GC线程数ParallelGCThreads设置
  • java 线程的那些事
  • 如何利用 Python 进行客户分群分析(附源码)
  • D1s RDC2022纪念版开发板开箱评测及点屏教程
  • 了解一下TCP/IP协议族
  • 【第十九部分】存储过程与存储函数
  • 字节序
  • PDF文件怎么转图片格式?转换有技巧
  • 筑基七层 —— 数据在内存中的存储?拿来吧你
  • Typecho COS插件实现网站静态资源存储到COS,降低本地存储负载
  • 2月23号作业
  • 因果推断方法(一)合成控制
  • 数据结构第12周 :( 有向无环图的拓扑排序 + 拓扑排序和关键路径 + 确定比赛名次 + 割点 )
  • Linux安装docker(无网)
  • 解决JNI操作内核节点出现写操作失败的问题
  • 纵然是在产业互联网的时代业已来临的大背景下,人们对于它的认识依然是短浅的
  • 干翻 nio ,王炸 io_uring 来了 !!(图解+史上最全)
  • ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境
  • ASP.NET Core MVC 项目 AOP之Authorization
  • 智能新冠疫苗接种助手管理系统
  • Python+Selenium4元素交互1_web自动化(5)
  • 2023双非计算机硕士应战秋招算法岗之深度学习基础知识