Linux系统crontab定时运行shell脚本失败的问题及解决

 更新时间:2023年04月07日 14:42:43   作者:我叫瘦企鹅  
这篇文章主要介绍了Linux系统crontab定时运行shell脚本失败的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

1.最近开始学习Linux系统使用

经过一段时间学习终于学到了shell脚本,因为学的东西比较零散,突发奇想我学过了crontab定时任务,今天也学了shell脚本的编写,为何不组合一下,既能提升学习深度,又能锻炼自学能力,何乐而不为呢?但是没想到,我已步入了Linux的坑。

2.脚本倒是很简单

因为刚学习,写的命令都很简单,请各位大神不要笑我,我写这篇博客目的一是为了记录踩过的坑,加深映像,二是给和我一样的新手提个醒,避免长时间陷入到坑里。

以下是我shell脚本的代码

#!/bin/bash
date >> /myshell/date.log

 这个脚本的作用是每次运行该脚本,将当前时间累加写入在/myshell/文件夹下的date.log文件中

首先我们要给这个脚本添加执行权限用添加权限的命令就行了

chmod 777 time.sh

目前我遇到的问题是要执行该脚本,目前只能在脚本所在目录用./time.sh执行。所以为了解决这个问题,我经过思考和某度,找到了两种方式让我们的脚本在其他目录直接使用time.sh命令都可以运行脚本。

第一种

我们使用$PATH查看系统现有的环境变量目录,也就是如果将我们的脚本放到这些任一个目录中,就可以在其他目录使用time.sh来运行我们的脚本。

但是由于这些目录存放的文件都是比较重要的。

或是系统文件,所以这种方式我觉得不太推荐,当然,高手的话随意就行,对于我这种初学者的话就尽量避开这种危险的东西。

第二种

我思考既然通过$PATH看到的这些目录,把脚本放进去就可以在其他地方运行,那我们应该也可以把我们写的脚本所在的目录添加到这个环境变量中,这样就可以达到我们的目的,于是根据这个思路,我又进行了某度,找到了解决方法。

可以用

vim /etc/profile

打开这个文件,在文件中添加如下代码:

export PATH=/myshell:$PATH

添加后保存退出,这段代码的原理就是在系统调用这个文件的时候,将环境变量PATH和我们需要自定义的目录拼接起来重新生成的PATH环境变量替换以前的,达到我们需要设置自定义目录的目的,要让我们编辑的内容生效,相当于让系统重新加载我们修改过的这个文件

用如下命令就行:

source /etc/profile

这样,再用$PATH命令查看,就可以看到我们自定义的文件夹也到PATH这个环境变量的值中了。

这时候执行一下命令time.sh发现/myshell目录下就多了一个date.log文件了。

再其他目录执行time.sh命令,然后查看date.log命令,相应时间也在文件中累加了。

原以为再用crontab把定时执行任务设置好就大功告成,可是更大的坑才刚刚开始。

添加定时执行任务

* 11 * * * time.sh

这个任务意思就是在十一点到十二点这个范围内,每隔一分钟执行一下time.sh这个脚本。具体的语法不知道的初学者可以某度一下,资料很多的。

重启一下crontab服务

service crond restart

然后使用命令实时查看date.log文件累加内容的情况

tail -f date.log

等了很长时间,内容都没变,是定时任务没执行成功?还是脚本出错了?

然后赶紧疯狂某度一下crontab运行的日志记录文件存放位置,实时更新查看一下:

tail -f /var/log/cron

等了几分钟,发现每隔一分钟定时任务有执行记录

97215982583c4a7ea3d14d8499219f55.png

但是查看date.log文件,发现内容并没有累加。

看来可能是crontab执行时候出错了。

于是修改定时任务语句,将定时任务执行的错误信息也写入到date.log文件中,看看报错内容是什么。

将定时任务修改为以下代码

* 11 * * * time.sh >> /myshel/date.log 2>&1

等几分钟,查看date.log的内容,显示如下

4946ade9cf7e43089c750335a620efe1.png

没有找到命令,可是我刚才不管是在文件目录还是其他目录都执行成功脚本了啊,为什么crontab执行还是报错找不到脚本呢?

会不会是环境变量的问题呢,带着猜想我再次进行某度,过程很艰辛,最后算是证实我的猜想是对的,就是系统环境变量和crontab使用的环境变量不一样导致的,其中过程由于篇幅有限,我就不细述了,直接说解决办法

最后我找到两解决办法 

第一:定时任务语句中以root用户来执行,修改定时任务语句如下:

* 11 * * * su - root -c time.sh

而后发现脚本成功执行了。

第二:定时任务脚本前面加上脚本所在目录绝对路径,定时任务语句修改为:

* 11 * * * /myshell/time.sh

再次观察,脚本也成功执行了。

当然,我还查到了其他很多方法,时间有限,没有一一测试,大家有兴趣的话可以多试试其他方法。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Linux设备之网络驱动介绍

    Linux设备之网络驱动介绍

    大家好,本篇文章主要讲的是Linux设备之网络驱动介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 教你使用Apache搭建Http下载服务器

    教你使用Apache搭建Http下载服务器

    这篇文章主要介绍了使用Apache搭建Http下载服务器的详细过程,Apache2默认采用的是80端口号,因此直接通过公网ip或域名就能访问,需要的朋友可以参考下
    2022-10-10
  • ssh报错no key alg的解决方法(关于低版本连接高版本ssh)

    ssh报错no key alg的解决方法(关于低版本连接高版本ssh)

    这篇文章主要介绍了ssh报错no key alg(关于低版本连接高版本ssh),通过ssh-keygen命令重新生成ssh主机秘钥,可以不用重启sshd服务,本文给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 确保Linux服务器安全 防范四种级别攻击

    确保Linux服务器安全 防范四种级别攻击

    以下的文章主要描述的是防范四种级别攻击确保Linux服务器安全,如果你对防范四种级别攻击确保Linux服务器安全心存好奇的话,以下的文章将会揭开它的神秘面纱。
    2011-03-03
  • 修改linux终端命令行颜色的操作方法

    修改linux终端命令行颜色的操作方法

    最近一直在使用 linux操作系统学习 Docker,在使用过程中发现命令的输入输出均是白色,很容易看花眼,而且不容易区分输入与输出内容,所以决定修改一下linux终端命令行颜色,下面就是本博主对 linux 终端命令行修改颜色的过程,需要的朋友可以参考下
    2024-02-02
  • Linux环境下快速搭建ftp服务器方法介绍

    Linux环境下快速搭建ftp服务器方法介绍

    这篇文章主要介绍了Linux环境下快速搭建ftp服务器方法介绍,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Linux用户磁盘配额设置方法

    Linux用户磁盘配额设置方法

    下面小编就为大家带来一篇Linux用户磁盘配额设置方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 实例分析对于历史Linux镜像的问题进行修复处理

    实例分析对于历史Linux镜像的问题进行修复处理

    在本篇内容中我们给大家总结了关于对于历史Linux镜像的问题进行修复处理知识点,有需要的朋友们跟着学习下。
    2019-02-02
  • 详解linux下redis安装、启动与停止,redis做成服务

    详解linux下redis安装、启动与停止,redis做成服务

    这篇文章主要介绍了详解linux下redis安装、启动与停止,redis做成服务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • Linux 常用命令挂载命令详解

    Linux 常用命令挂载命令详解

    这篇文章主要介绍了Linux 常用命令挂载命令详解的相关资料,需要的朋友可以参考下
    2017-01-01

最新评论