zoukankan      html  css  js  c++  java
  • RH033读书笔记(10)-Lab 11 Process Control

    Lab 11 Process Control

    Sequence 1: Job Control

    1. [student@stationX ~]$ su -

    2. Begin some jobs in the background:
    [root@stationX ~]# tail -n0 -f /var/log/messages &
    [root@stationX ~]# updatedb &

    3. [root@stationX ~]# service syslog restart

    4. [root@stationX ~]# jobs

    5. [root@stationX ~]# kill %1
    [root@stationX ~]# jobs

    6. Next, start an instance of vim
    [root@stationX ~]# vim

    7. While in vim, press Ctrl-z to suspend the current program.

    8. Run jobs again and note vim's job ID.

    9. [root@stationX ~]# fg 3

    Sequence 2: Conditional Execution

    1. ping -c1 -w2 $TARGET &> /dev/null

    2. vi ~/bin/reach.sh
    #!/bin/bash
    TARGET=$1
    ping -c1 -w2 $TARGET &> /dev/null

    3. [student@stationX ~]$ chmod a+x ~/bin/reach.sh

    4. [student@stationX ~]$ reach.sh server1; echo $?
    0
    [student@stationX ~]$ reach.sh station100; echo $?
    1

    5. Now use the conditional operators && and || to report success or failure based on ping's
    exit value.
    #!/bin/bash
    TARGET=$1
    ping -c1 -w2 $TARGET &> /dev/null &&
    echo "$TARGET is UP" ||
    echo "$TARGET is DOWN"

    6. [student@stationX ~]$ reach.sh server1; echo $?
    server1 is UP
    0
    [student@stationX ~]$ reach.sh station100; echo $?
    station100 is DOWN
    0

    7. The script returns 0 for both tests because the last command run is now echo, not ping.
    Since echo does not fail, it returns success.

    8. Modify the script again
    #!/bin/bash
    TARGET=$1
    ping -c1 -w2 $TARGET &> /dev/null
    RESULT=$?
    if [ $RESULT -ne 0 ]
    then
    echo "$TARGET is DOWN"
    else
    echo "$TARGET is UP"
    fi
    exit $RESULT

    9. Test the script.
    [student@stationX ~]$ reach.sh server1; echo $?
    server1 is UP
    0
    [student@stationX ~]$ reach.sh station100; echo $?
    station100 is DOWN
    1

    10. [student@stationX ~]$ sudo mv ~/bin/reach.sh /usr/local/bin/

    Sequence 3: Scheduling One-Time Jobs

    Scenario: In this sequence you will schedule a job for one-time execution at a specified
    time using the tool you developed in the previous sequence.

    Instructions:

    1. Start in a shell, either on a virtual console or a graphical shell, such as gnome-terminal. You should be signed in as student.

    2. Schedule your reach.sh tool to check all stations five minutes from now:
    [student@stationX ~]$ at now+5min
    at> for x in $(seq 1 40); do
    at> reach.sh station$x
    at> done
    at> Ctrl-d
    job 7 at 2007-01-23 08:40

    Note: Since your script only emits output when there is a problem, you do not have to worry
    about redirecting STDOUT or STDERR in regular usage. Your job will only notify you of
    unreachable stations!

    3. The system responded with a job number, but list your scheduled jobs to see any others that
    you may have created (or that root may have created for you!):

    [student@stationX ~]$ at -l
    job 7 at 2007-01-23 08:40 a student

    4. For detailed information, cat the job:

    [student@stationX ~]$ at -c 7

    Read the output, observing that each at job stores the environment for the user that created
    the job. The job's command is listed near the bottom of the output.

    5. Optionally, watch the job list until your job executes.

    [student@stationX ~]$ watch -n1 'at -l'

    6. Check your mail after the job executes to review its output.

    [student@stationX ~]$ mutt

    Sequence 4: Finding Processes

    Scenario: In this sequence you will find the process on your system that is using the most
    CPU time. Finding it will require the use of ps and tail.

    Instructions:

    1. Start in a shell, either on a virtual console or a graphical shell, such as gnome-terminal. You should be signed in as student.

    2. Review the ps man page to find the standard format specifier for displaying the PID,
    program name, and percent CPU utilization.

    man ps

    Within the man page, search for the -o option:

    /-o
    Press n until you find the section on the -o option. Instead of listing the available columns,
    it refers you to the STANDARD FORMAT SPECIFIERS section of the man page, so try
    searching for that at this point:

    /STANDARD FORMAT SPECIFIERS

    Find the list of columns to determine which codes are appropriate.

    3. List all processes on your system, limiting output to PID, program name, and percent CPU
    utilization.

    ps axo pid,comm,pcpu

    You should see a long list of processes scroll by.

    4. Now open up the man page for ps to determine if it has the ability to sort output.

    man ps
    /sort

    5. Once you find the correct sort option, add it to your previous command:

    ps axo pid,comm,pcpu --sort=pcpu

    6. The output looks right, so now pipe it through another command to restrict output to a
    single process:

    ps axo pid,comm,pcpu --sort=pcpu | tail -n1

    Sequence 5: Recurring Jobs

    Scenario: In this sequence you will take the command you developed in the previous sequence and adapt it for use in a recurring job. You would like the output mailed to student's email complete with column headings.

    Instructions:

    1. Observing that ps automatically outputs column headings, review the man page to
    determine how to reverse the sort order, such that the job with the most CPU time is at the
    top of the ouput, along with the column headings.

    Add the reverse sort indicator (-) in front of the sort column:

    ps axo pid,comm,pcpu --sort=-pcpu

    2. Now restrict output to the top two lines:

    ps axo pid,comm,pcpu --sort=-pcpu | head -n2

    The output is now suitable for job scheduling.

    3. Review the man page for crontab to check the field order:

    man crontab

    4. Oops! There are two man pages for crontab, so open up the one in section 5, which deals
    with configuration files:

    man 5 crontab

    5. Use information in the man page to determine how would you write a crontab entry that
    should run every five minutes?

    */5 * * * *

    6. Use your answer to the previous question to add a crontab entry that runs the ps command
    from earlier every five minutes.

    You can do this either by running crontab -e and using a text editor or by piping directly to
    crontab like this:

    echo '*/5 * * * * ps axo pid,comm,pcpu --sort=-pcpu | head -n2' | crontab

    7. Once you have added the job, list your crontab to confirm:

    crontab -l

    8. Now add lines to run your reach.sh command on server1 and station100 every two minutes.
    Because /usr/local/bin is not in the PATH used by cron, you will need to use an
    absolute path to the script.

    Your crontab should now look like this:

    */5 * * * * ps axo pid,comm,pcpu --sort=-pcpu | head -n2
    */2 * * * * /usr/local/bin/reach.sh server1
    */2 * * * * /usr/local/bin/reach.sh station100

    9. Once a few minutes have passed, check your mail with the mutt command to see the output
    of your jobs. See the instructions at the beginning of this lab if you are unfamiliar with
    mutt.

    Some observations about what you should see:

    • You did not receive any mail regarding the reachability of server1; your script correctly
    avoids output on successful completion

    • You received at least one message regarding the failure to reach station100

    10. For cleanup, remove your crontab:

    crontab -r; crontab -l

  • 相关阅读:
    NXOpen 创建方体block代码
    Mysql---2 DDL DML DQL DCL
    Mysql数据库--1数据库操作
    FFmpeg
    Servlet Web
    Java web Springboot
    Java 网络
    Java 注解 反射
    Java 线程状态
    Java Lambda
  • 原文地址:https://www.cnblogs.com/thlzhf/p/3444079.html
Copyright © 2011-2022 走看看