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 不能同时使用

  

posted @ 2019-12-18 21:46  MlxgzZ  阅读(594)  评论(0编辑  收藏  举报