zoukankan      html  css  js  c++  java
  • linux系统用户下的crontab任务不执行问题处理

    需求:需要每一天对数据库做一个备份,oracle数据库,linux系统。

    备份命令采用最简单的导出导入。

    首先确认服务器是否开启任务计划服务,只有root用户才能对crond服务进行开启和关闭

    [root@enfo124 ~]# service crond status
    crond (pid  1758) is running...
    [root@enfo124 ~]# service crond stop
    Stopping crond:                                            [  OK  ]
    [root@enfo124 ~]# su - cognos
    [cognos@enfo124 ~]$ service crond status
    crond is stopped
    [cognos@enfo124 ~]$ su - root
    [root@enfo124 ~]# service crond start
    Starting crond:                                            [  OK  ]
    [root@enfo124 ~]# service crond status
    crond (pid  2805) is running...
    [root@enfo124 ~]# su - cognos
    [cognos@enfo124 ~]$ service crond status
    crond (pid  2805) is running...
    最初sh文件内容为

    ------------------------------------------------------------

    #!/bin/bash
    expdp username/password@enforc directory=kettledb dumpfile=enforc_$(date +%Y%m%d%H%M).dmp logfile=enforc_$(date +%Y%m%d%H%M).log

    -----------------------------------------------------------

    文件名字与路径

     /home/oracle/bin/export_enforc.sh

    部署开始,切换至oralce用户,查看oracle用户的crontab 计划(crontab -l)。进入任务计划的编辑模式(crontab -e)

    添加入以下行:

    30 18 * * * /home/oracle/bin/export_enforc.sh

    每天18:30分执行export_enforc.sh文件,结果不执行,手工赋值执行/home/oracle/bin/export_enforc.sh是可以的。

    于是看了前辈写的sh后说执行的环境不对于是加入以下几行:

    #!/bin/bash
    if [ -f ~/.bash_profile ];
    then
      . ~/.bash_profile
    fi
    expdp username/password@enforc directory=kettledb dumpfile=enforc_$(date +%Y%m%d%H%M).dmp logfile=enforc_$(date +%Y%m%d%H%M).log

    执行命令:

    [oracle@enfo212 ~]$ cd ~/
    [oracle@enfo212 ~]$ pwd
    /home/username

    ----------可以看出来~/代表用户家目录/home/username。

    . 文件= bash 文件 (执行shell文件)

    由此可以看出-f查找如果目录存在这个系统环境文件则执行,建造一个shell环境,每个用户都有自己的.bash_profile

    再次部署到crontab里面可以看到:

    随便部署一个将要发生的时间点,任务被执行,这样就每天在这个时间点就对数据库enforc坐了导出的工作

    具体为什么加入哪些代码?可以参考 /home/username/.bash_profile 文件

    PS:总结crontab任务不执行可以从这些方面入手

    1:请确保手工可以执行该文件(给sh文件增加X权限看文件格式是否为unix→ set ff? →set ff=unix)

    2:确认开始crond服务(service crond status/start/stop

    3: 确认给sh文件制定bash环境

    if [ -f ~/.bash_profile ];
    then
      . ~/.bash_profile
    fi

  • 相关阅读:
    Leetcode 1711. 大餐计数(桶)
    macOS下安装powerline-status失败(报错Could not install packages due to an EnvironmentError)
    macOS下安装oh my zsh失败(报错Connection refused)
    Chapter 10 Operator Overloading
    牛客IOI周赛26-普及组 B. 子序列(int128)
    关于状压DP中子集状态的枚举
    2021蓝桥杯省赛第一场C/C++A组 试题E:回路计数(状压DP)
    AcWing 2879. 画中漂流(简单DP)
    Leetcode 525. 连续数组(前缀和性质/map)
    牛客小白月赛34 B. dd爱探险(状压DP)
  • 原文地址:https://www.cnblogs.com/wxjnew/p/3490736.html
Copyright © 2011-2022 走看看