0%

shell之控制脚本

控制脚本

linux 中的信号主要用用来启动,停止,终止进程等操作

  • 下面列出了主要的信号列表

    • 信号 描述
      1 signup 挂起进程
      2 sigint 终止进程
      3 sigquit 停止进程
      9 sigkill 强杀进程
      15 sigterm 尽可能终止进程
      17 sigstop 无条件停止进程,而不是终止进程
      18 sigtstp 停止h或暂停进程,但不终止进程
      19 sigcont 继续运行停止的进程
  • 默认下bash会忽略3,15信号

以后台的方式运行脚本

  • 有时我们执行命令会需要很长的时间,因此可以使用在后台的方式运行脚本,非常简单,在命令后面加 &。
  • 但是使用& 这种方式执行脚本的方式要注意,脚本中的输出与shell会混杂在一起,所以最好对脚本中的stdout和stderr进行重定向。
  • 每次执行时,系统会分配一个pid,要注意的时终端退出的话后台进程都会随之而退出,因此我们需要在终端退出后台进程仍然运行的方法

nohup

  • nohup命令会在你退出终端仍然阻止进程结束
  • 格式是:nohup command &,nohup命令还会自动将stdout和stderr的消息重定向到一个名为nohup.out的文件中

作业控制

  • jobs命令可以查询当前正在处理的作业,举个例子

  • 执行一段shell脚本,如下vim test.sh

    #!/bin/bash 
    # Test job control 
    # 
    echo "Script Process ID: $$" 
    # 
    count=1 
    while [ $count -le 10 ] 
    do    
        echo "Loop #$count"    
        sleep 10    
        count=$[ $count + 1 ] 
    done 
    # 
    echo "End of script..." 
    • 先执行sh test.sh,再ctrl+z停止,再执行sh test.sh > test.out &

    • 使用jobs命令查询,jobs -l 结果是

    • $ jobs -l 
      [1]+  1897 Stopped                 ./test10.sh 
      [2]-  1917 Running                 ./test10.sh > test10.out & 

      加号是默认作业,减号是下一个要执行的作业,任何时候都只一个加号一个减号

定时执行任务

定时执行任务有两种方式,1是at命令,2是cron命令,下面来介绍这cron

  • cron采用一个特别的时间格式去指定任务何时运行,格式如下

    • min hour dayofmonth month dayofweek command 
      每天10:15运行:15 10 * * * command
      每周一4:15执行:15 16 * * 1 command
      
    • 注意:命令必须是脚本的全路径名

    • crontab -l 可以列出已存在的cron时间表

~~