• 将垃圾送入无底洞,顺便整理dev知识


      相信用过Linux的童鞋们都用过crontab来做定时任务,不需要额外的安装程序和配置,一条简单的语句搞定定时任务,但是小伙伴们发现了没,如果你的定时任务执行频率很高而且会产生大量的输出的话,你的老爷机就会逐渐衰弱,最终崩溃,吼吼,因为任务执行过程中产生的输出已经把你的内存吃光了。

      怎么办呢?

      Linux中有个目录叫做“dev”,这个词是“device”的缩写,意思为“设备”,这个目录中包含所有Linux系统中使用的外部设备,我们都知道,Linux中设备都是被当作文件对待的,所以这个目录下面都是一些个文件,每个文件实际上就是一个设备接入的一个端口,通过查阅相关资料了解到这些文件名所代表的含义如下:

     文件  说明
    /dev/hd[a-t] IDE设备
    /dev/sd[a-z] SCSI设备
    /dev/fd[0-7] 标准软驱
    /dev/md[0-31] 软raid设备
    /dev/loop[0-7] 本地回环设备
    /dev/ram[0-15] 内存
    /dev/null 无限数据接收设备,相当于黑洞
    /dev/zero 无限零资源
    /dev/tty[0-63] 虚拟终端
    /dev/ttyS[0-3] 串口
    /dev/lp[0-3] 并口
    /dev/console 控制台
    /dev/fb[0-31] framebuffer
    /dev/cdrom => /dev/hdc
    /dev/modem => /dev/ttyS[0-9]
    /dev/pilot => /dev/ttyS[0-9]
    /dev/random 随机数设备
    /dev/urandom 随机数设备

      别的都比较简单啦,有意思的是/dev/null和/dev/zero这两个,/dev/null是一个无底洞,任何输入都会被直接抛弃,而/dev/zero可以不断的产生空字符,可以用来产生具有特定大小的空文件。

      我们需要用到的就是/dev/null这个家伙,把计划任务产生的所有输出都丢到这个东东里面,如下

    程序 > /dev/null

      但是千万注意了哦,这个只是把标准输出放入无底洞,如果程序执行过程中输出错误信息还是会在内存里到处扔的,那怎么办呢?

      补习定向输出相关知识:

        >和>>都是重定向输出
        1> 指标准信息输出路径(也就是默认的输出方式)
        2> 指错误信息输出路径
        2>&1 指将标准信息输出路径指定为错误信息输出路径(也就是都输出在一起)

      所以知道该怎么办了吧!

    程序 > /dev/null 2 > &1

      另外,在使用crontab的时候经常有这么个诡异问题:脚本写完测试运行好好的,但是加入到计划任务就抽风了。

      其实通常这都是由于crontab执行的时候没有引入环境变量引起的,要在脚本的上面(最好是第二行)引入环境变量哦~~

      在crontab调用的脚本中写上如下语句来代入环境变量:

    . /etc/profile
    . /home/用户名/.profile #有时候是下面这个
    . /home/用户名/.bash_profile

             本文章系受著作权法保护,未经著作人同意,不得盗用;使用或引用本文章内容请注明作者名、原地址:书中叶http://www.cnblogs.com/libook

  • 相关阅读:
    java字符串类型——String
    Arrays.asList(String[]).add(String) 报错
    Bigdecimal除法异常
    java使用AES-256-ECB(PKCS7Padding)解密——微信支付退款通知接口指定解密方式
    centos安装rocketMQ
    拦截器中获取不到controller注解问题
    springboot接收date类型参数
    mybatis
    mybatis generator对于同一个表生成多次代码的问题
    抓包工具之MitmProxy
  • 原文地址:https://www.cnblogs.com/libook/p/3442180.html
Copyright © 2020-2023  润新知