• linux目录结构及定时任务


    1. Linux的根目录(最顶层的目录)
        windows系统有根目录:c盘的根目录就是c:
                             d盘的根目录就是d:
                             每个盘(分区)都有自己的根目录
     
        Linux系统,
          也支持多个分区
          Linux的分区和目录是没有关系!
        
       Linux的目录结构:
           只有1个根 /
           根目录下有:
             /root   是管理员的家目录
             /home   普通用户的家目录       
                  /home/zhang_fei  就是zhang_fei的家目录
             /etc    保存配置文件
             /usr   用来保存用户安装的程序
                UNIX的发展历史: 
                    最找的UNIX只有/目录
                    再后来UNIX的系统越来越大,一个磁盘装不下去了。
                    就使用第2块磁盘,就使用/usr来挂载第2个磁盘
                    所以,/usr目录下有很多子目录和根目录下的相同。                
             /dev  用来存放设备文件
             /var  用来存放内容经常变化的文件
                   比如日志文件, /var/log/messages
             /tmp  用来存放临时文件
             /bin  用来存放系统的二进制命令的
             /mnt  用来挂载可移动的存储设备             
               
             目录层次标准FHS
           
             误解:/usr目录"放在/目录内"
                  不是容器的关系
     
       Linux的目录结构,是一个与分区无关的”目录结构”
        
    2. Linux系统的目录和分区的关系
        目录, 是固定的,逻辑意义上的,和分区没有直接的关系
         
       1块磁盘(硬盘),可以划分为多个分区
           分区是物理意义的,是实际存在的。 
       安装系统时,必须把某个分区挂载到根目录
       分区可以挂载在任意一个目录上,这个目录就称为挂载点。
     
    3. 相对路径和绝对路径
         
       绝对路径:从/(根目录)开始的路径
       相对路径:相对与“当前目录”
                 注意:当前目录是可变的!
                 当前目录用 . 表示
               
                 从当前目录开始的,就是相对路径
                 ./data/test/log
                 data/test/log
                 以上两种方式等效。
     
                 ../test/data
                 ..表示当前目录的上一级目录
     
    4. 常用的配置文件
       /etc/sysconfig/network-sripts/ifcfg-eth0
       网卡eth0的配置文件
        
       /etc/resolv.conf
       指定DNS服务器的IP地址
        
       /etc/hosts
       设置域名(主机名)和ip的对应关系。
        
       /etc/fstab
       使用mount -a挂载所有文件系统时的配置文件
     
       /etc/rc.local
       开机自动启动的程序 
       可以把需要开机自动启动的命令添加到该文件。
     
       /etc/inittab
       主机启动以后,init进程(Linux系统的第一个进程)把系统设置为哪种运行级别
       运行级别(0-6)
        0: 关机
        1. 单用户模式
        2. 多用户模式,但是NFS无效
        3. 多用户模式,具有网络功能的
        4. 未使用
        5. X11(多用户图形模式)
        6:重启
        
       /etc/profile 
       定义系统的全局的环境变量
      
       /etc/group
       存放用户组的信息
     
       /etc/passwd
       存放用户名的相关信息
        
       /etc/shadow
       存放用户密码
     
       /etc/syslog.conf
       CentOS5.x中,日志的配置文件
     
       /etc/rsyslog.conf
       CentOS6.x中,日志的配置文件
     
    5. 定时任务
     补充:
        程序和进程
        程序:就是一个软件。
        进程:就是程序的一次执行过程。
      
        进程ID: 每个进程都有自己唯一的标识。
     
        查看进程: ps -ef
     
        进程的存在方式:前台, 后台。
          即进程可以在前台运行,也可以在后台运行。
          后台进程,一般都一直运行,直到关机,又称为“守护进程”
       
        定时任务, 就是一个守护进程。
     
    2. Linux的定时任务
       定时任务(调度任务)
        
        Linux的定时任务,通过crond服务实现。
     
       2.1 crond是什么?
           crond, 就是一种守护进程,
           可用来定期地执行命令或者指定的程序。
     
           crond服务,默认已经安装。
          
       2.2 crond的功能
           可以实现各种定时任务,
           可以精确到分钟。
     
           如果需要每秒中执行1个定时任务,
           直接用crond实现不了。
           可以用脚本文件实现:
               例如:
               while true; do
                   echo "hello world"
                   sleep 1
               done     
     
       2.3 为什么要使用定时任务
           服务器, 7*24小时都开机提供服务的。
           有一些重要数据,每天都需要备份一次。
           就需要使用定时服务。
     
    Linux定时任务的分类
       1)系统自身的定时任务
       2)用户自定义的定时任务
       这两类定时任务,都需要通过crond服务来实习。
     
    Linux定时任务的类型:
       1)at  只执行1次。
       2)anacron  
             用来检测听机期间,没有执行的任务。
             然后再开机后,把这些任务全部执行。
             最多只执行1次。
       3)crond
           
    怎样使用用户自定义的定时任务:
        crontab
         
       # crontab -l 
         查看当前用户的定时任务
     
       # crontab -e
         编辑当前用户的定时任务
         编辑完毕后保存时,会自动检查格式,
         如果格式不合法,就不保存。
     
         如果格式合法,就保存到/var/spool/cron/root
         如果是用户zhangfei,那么就保存到
         /var/spool/cron/zhangfei
     
         要点:
         不要直接编辑用户的定时任务文件:
         /var/spool/cron/root
         因为,直接用vim编辑它时,不会自动检查语法。
         使用crontab -e 就能自动检查语法。
     
    用户定时任务的格式
    分 时 日 月 周    命令或者执行脚本
    *  *  *  *  *     echo "hello world" >> /tmp/mytest.log
     
    第1列为 *, 就表示每分钟
           00, 就表示分钟时刻为00
           */3, 就表示每3分钟
           30,40 就表示30分钟和40分钟
           30-40 就表示30,31,32,.... 40 共11次
    第2列为 *,  就表示每小时
    第3列为 *, 就表示每天
    第4列为 *,  就表示每月
    第5列为 *,  就表示每周
             0和7都表示周日
             
    实例:
    30 3,12 * * * /bin/sh  /tmp/test.sh
    每天的凌晨3:30和中午12:30,执行/tmp/test.sh
     
    30 */6  * * * /bin/sh  /tmp/test.sh
            
    30 8-12/2 * * * /bin/sh  /tmp/test.sh
     
    30 21 * * * /bin/sh  /tmp/test.sh
     
    45  4  1,10,22  *  * /bin/sh  /tmp/test.sh
     
    10 1 * * 6,0  /bin/sh  /tmp/test.sh
     
    00 */1  * * * /bin/sh  /tmp/test.sh
    每小时的整点时刻执行1次
     
    *  23,00-07/1 * * * /bin/sh  /tmp/test.sh
    每天晚上11点以及凌晨0点到7点,每分钟执行1次。
     
    00 11 * 4  1-3 /bin/sh  /tmp/test.sh
    每年的4月分的周1到周3的上午11点整,执行1次
     
    00 11 5 4  1 /bin/sh  /tmp/test.sh
    错误:周和日不要同时使用。
     
     
    定时任务的编写要点:
    1. 对于一般的定时任务,可以先把这个任务的时间调整为每分钟1次,以便于测试。
       测试正确后,再修改时间。
     
       对于有影响的定时任务,就应该在自己的测试环境下测试。
       测试没有问题后,在放到生产环境。
     
    2.定时任务的最后1列,最好先在终端中执行,确定没有问题后,再复制到定时任务中。
     
    3. 定时任务中的路径,最好都用绝对路径。
     
    4. 每个定时任务,都应该加注释(用#)
    5. 定时任务如果是执行脚本文件,那么就最好使用/bin/sh 来执行,
       而不要直接执行脚本文件。
       即: /bin/sh   脚本文件名
       可以避免脚本文件没有可执行属性,而导致错误
    6. 超过两行的命令,就最好用1个脚本文件来实现。
    7. 当需要为指定用户定义定时任务时,
       最后先切换到该指定用户,然后再定义定时任务。
     
    8. 定时任务的后面, 最好加上
       >/dev/null 2>&1
     
       如果在定时任务后面不加以上部分,就可能很快导致“磁盘空间满“
       原因:定时任务每次被执行后,就会自动的给用户发1封邮件,
             而如果没有开启邮件服务,就会把邮件作为1个文件发送到
              /var/spool/clientmqueue/,就会导致该目录下文件数据巨增
              从而使inode号耗尽!而每创建1个文件,就需要1个inode
              
        /dev/null  表示linux的垃圾箱
        >/dev/null 就把前面的输出(1)重定向到垃圾箱
        2 >& 1表示把标准错误输出(2)重定向到标准输出(1)
        就等效与,把标准输出和标准错误输出,都重定向到回收站
     
    9. 在定时任务,不要随意的打印输出信息。
       如果确实需要输出信息,那么应该把输出信息重定向指定的文件。
       打印信息将被用邮件的形式发给指定的用户    
     
       例如:
       tar  czvf /tmp/etc.tar.gz  /etc
       改为
       tar czf  /tmp/etc.tar.gz  /etc
       或者改为:
       tar czvf  /tmp/etc.tar.gz  /etc  >& /tmp/tar.log
     
       补充:>& /tmp/tar.log
            表示把前面的标准输出和标准错误输出都重定向到/tmp/tar.log
     
    10. 定义任务的脚本文件,最好统一放到某个目录,不要乱放。
        比如可以放到 /server/scripts/ 
     
    11. 时间变量的使用
         echo `date +%Y年%m月%d日%H:%M:%S`
         %在定时任务中,表示新的一行,new line
     
         所以时间变量中的%应该进行转义
         即在%前加 
         echo `date +\%Y年\%m月\%d日\%H:\%M:\%S`
     
     
    系统的定时任务
       用户的定时任务,用来实现用户自定义的定时任务。
       系统的定时任务,一般用于系统级的维护工作。
           比如:写缓存数据到硬盘。
                 清理日志。
        
       系统的定时任务的实现:
       编辑 /etc/crontab
         
    调试定时任务的方法
    1. 增加频率
       把任务的执行频率调快一点,比如每分钟1次。
       如果该任务有影响,就一定要放到测试环境下测试。
     
    2. 修改系统的时间
    3. 在定时任务中输出调试信息
       输出信息会自动发邮件给指定用户
       或者把调试信息重定向指定文件
     
    定时任务的常见错误:
    1. 环境变量
       在定时任务执行,系统中的大部分环境变量都不能使用
        
       解决方案:
       1)重新定义这些环境变量
          UID=0
     
       2)导入环境变量的配置文件
          -------------------------
          /bin/sh  /etc/profile
           
           ........
          --------------------------
          补充:/etc/profile就是系统的环境变量的定义脚本
     
    2. * * * * * echo "hello" >> /tmp/a.log >/dev/null 2>&1
       >>/tmp/a.log 和后面的 >/dev/null 2>&1 不能同时使用
    

      

  • 相关阅读:
    使用 VBRichClient 库
    提取文件夹目录的办法
    编程语言转换
    解决linux服务器上matplotlib中文显示乱码问题
    动态规划 53:Maximum Subarray,152:Maximum Subarray,266. Palindrome Permutation 回文全排列
    动态规划:494,576
    ResourceExhaustedError 解决方案
    周赛138场
    leetcode 115
    leetcode 372
  • 原文地址:https://www.cnblogs.com/The-day-of-the-wind/p/12063888.html
Copyright © 2020-2023  润新知