웹사이트 검색

쉘 스크립팅을 사용하여 Linux 시스템 유지 관리 작업 자동화 - 4부


얼마 전에 나는 효과적인 시스템 관리자/엔지니어의 특징 중 하나가 게으름이라는 것을 읽었습니다. 처음에는 약간 모순적인 것처럼 보였지만 저자는 계속해서 그 이유를 설명했습니다.

시스템 관리자가 문제를 해결하고 반복적인 작업을 수행하는 데 대부분의 시간을 소비한다면 해당 관리자가 일을 제대로 수행하지 않고 있다고 의심할 수 있습니다. 즉, 효과적인 시스템 관리자/엔지니어는 가능한 한 적은 작업으로 반복적인 작업을 수행할 수 있는 계획을 개발해야 하며, 다음을 사용하여 문제를 예측해야 합니다.

예를 들어, 이 시리즈의 3부 – Linux 도구 세트를 사용하여 시스템 활동 보고서 모니터링에서 검토한 도구입니다. 따라서 비록 그 사람이 별 일을 하지 않는 것처럼 보일 수도 있지만, 이는 우리가 이 튜토리얼에서 이야기할 쉘 스크립팅의 도움으로 대부분의 책임이 처리되었기 때문입니다.

쉘 스크립트란 무엇입니까?

간단히 말해서, 쉘 스크립트는 리눅스 커널과 최종 사용자 사이에 인터페이스 계층을 제공하는 또 다른 프로그램인 쉘에 의해 단계별로 실행되는 프로그램 그 이상도 그 이하도 아닙니다.

기본적으로 RHEL 7에서 사용자 계정에 사용되는 셸은 bash(/bin/bash)입니다. 자세한 설명과 역사적 배경을 알고 싶다면 이 Wikipedia 기사를 참조하세요.

이 셸에서 제공하는 수많은 기능 세트에 대해 자세히 알아보려면 (Bash Commands)에서 PDF 형식으로 다운로드되는 man 페이지를 확인하세요. 그 외에는 귀하가 Linux 명령에 익숙하다고 가정합니다(그렇지 않은 경우 계속 진행하기 전에 linux-console.net에 있는 A Guide from Newbies to SysAdmin 기사를 읽어 보시기 바랍니다). 이제 시작해 보겠습니다.

시스템 정보를 표시하는 스크립트 작성

편의를 위해 쉘 스크립트를 저장할 디렉토리를 생성해 보겠습니다.


mkdir scripts
cd scripts

그리고 원하는 텍스트 편집기를 사용하여 system_info.sh라는 새 텍스트 파일을 엽니다. 맨 위에 몇 가지 주석을 삽입하고 그 뒤에 몇 가지 명령을 삽입하는 것으로 시작하겠습니다.


#!/bin/bash

Sample script written for Part 4 of the RHCE series
This script will return the following set of system information:
-Hostname information:
echo -e "\e[31;43m***** HOSTNAME INFORMATION *****\e[0m"
hostnamectl
echo ""
-File system disk space usage:
echo -e "\e[31;43m***** FILE SYSTEM DISK SPACE USAGE *****\e[0m"
df -h
echo ""
-Free and used memory in the system:
echo -e "\e[31;43m ***** FREE AND USED MEMORY *****\e[0m"
free
echo ""
-System uptime and load:
echo -e "\e[31;43m***** SYSTEM UPTIME AND LOAD *****\e[0m"
uptime
echo ""
-Logged-in users:
echo -e "\e[31;43m***** CURRENTLY LOGGED-IN USERS *****\e[0m"
who
echo ""
-Top 5 processes as far as memory usage is concerned
echo -e "\e[31;43m***** TOP 5 MEMORY-CONSUMING PROCESSES *****\e[0m"
ps -eo %mem,%cpu,comm --sort=-%mem | head -n 6
echo ""
echo -e "\e[1;32mDone.\e[0m"

다음으로 스크립트 실행 권한을 부여합니다.


chmod +x system_info.sh

그리고 실행하세요:


./system_info.sh

더 나은 시각화를 위해 각 섹션의 헤더는 색상으로 표시됩니다.

해당 기능은 다음 명령으로 제공됩니다.


echo -e "\e[COLOR1;COLOR2m<YOUR TEXT HERE>\e[0m"

여기서 COLOR1COLOR2는 각각 전경색과 배경색입니다(자세한 정보와 옵션은 Arch Linux Wiki의 이 항목에 설명되어 있습니다). <여기에 텍스트를 입력하세요 >은 색상으로 표시하려는 문자열입니다.

작업 자동화

자동화해야 할 작업은 경우에 따라 다를 수 있습니다. 따라서 단일 기사에서 가능한 모든 시나리오를 다룰 수는 없지만 셸 스크립팅을 사용하여 자동화할 수 있는 세 가지 일반적인 작업을 제시하겠습니다.

1) 로컬 파일 데이터베이스 업데이트, 2) 777 권한이 있는 파일 찾기(또는 삭제), 3) 파일 시스템 사용량이 초과되면 경고 정의된 한도.

스크립트 디렉터리에 다음 내용으로 auto_tasks.sh라는 파일을 생성해 보겠습니다.


#!/bin/bash

Sample script to automate tasks:
-Update local file database:
echo -e "\e[4;32mUPDATING LOCAL FILE DATABASE\e[0m"
updatedb
if [ $? == 0 ]; then
        echo "The local file database was updated correctly."
else
        echo "The local file database was not updated correctly."
fi
echo ""

-Find and / or delete files with 777 permissions.
echo -e "\e[4;32mLOOKING FOR FILES WITH 777 PERMISSIONS\e[0m"
Enable either option (comment out the other line), but not both.
Option 1: Delete files without prompting for confirmation. Assumes GNU version of find.
#find -type f -perm 0777 -delete
Option 2: Ask for confirmation before deleting files. More portable across systems.
find -type f -perm 0777 -exec rm -i {} +;
echo ""
-Alert when file system usage surpasses a defined limit 
echo -e "\e[4;32mCHECKING FILE SYSTEM USAGE\e[0m"
THRESHOLD=30
while read line; do
        # This variable stores the file system path as a string
        FILESYSTEM=$(echo $line | awk '{print $1}')
        # This variable stores the use percentage (XX%)
        PERCENTAGE=$(echo $line | awk '{print $5}')
        # Use percentage without the % sign.
        USAGE=${PERCENTAGE%?}
        if [ $USAGE -gt $THRESHOLD ]; then
                echo "The remaining available space in $FILESYSTEM is critically low. Used: $PERCENTAGE"
        fi
done < <(df -h --total | grep -vi filesystem)

스크립트 마지막 줄의 두 < 기호 사이에 공백이 있다는 점에 유의하세요.

크론 사용

효율성을 한 단계 더 높이려면 컴퓨터 앞에 앉아 해당 스크립트를 수동으로 실행하고 싶지 않을 것입니다. 오히려 cron을 사용하여 해당 작업이 주기적으로 실행되도록 예약하고 이메일을 통해 사전 정의된 수신자 목록에 결과를 보내거나 웹 브라우저를 사용하여 볼 수 있는 파일에 저장합니다.

다음 스크립트(filesystem_usage.sh)는 잘 알려진 df -h 명령을 실행하고 출력을 HTML 테이블로 형식화한 후 report.html 파일에 저장합니다.


#!/bin/bash
Sample script to demonstrate the creation of an HTML report using shell scripting
Web directory
WEB_DIR=/var/www/html
A little CSS and table layout to make the report look a little nicer
echo "<HTML>
<HEAD>
<style>
.titulo{font-size: 1em; color: white; background:#0863CE; padding: 0.1em 0.2em;}
table
{
border-collapse:collapse;
}
table, td, th
{
border:1px solid black;
}
</style>
<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
</HEAD>
<BODY>" > $WEB_DIR/report.html
View hostname and insert it at the top of the html body
HOST=$(hostname)
echo "Filesystem usage for host <strong>$HOST</strong><br>
Last updated: <strong>$(date)</strong><br><br>
<table border='1'>
<tr><th class='titulo'>Filesystem</td>
<th class='titulo'>Size</td>
<th class='titulo'>Use %</td>
</tr>" >> $WEB_DIR/report.html
Read the output of df -h line by line
while read line; do
echo "<tr><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $1}' >> $WEB_DIR/report.html
echo "</td><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $2}' >> $WEB_DIR/report.html
echo "</td><td align='center'>" >> $WEB_DIR/report.html
echo $line | awk '{print $5}' >> $WEB_DIR/report.html
echo "</td></tr>" >> $WEB_DIR/report.html
done < <(df -h | grep -vi filesystem)
echo "</table></BODY></HTML>" >> $WEB_DIR/report.html

RHEL 7 서버(192.168.0.18)에서는 다음과 같습니다.

원하는 만큼 많은 정보를 해당 보고서에 추가할 수 있습니다. 매일 오후 1시 30분에 스크립트를 실행하려면 다음 crontab 항목을 추가하세요.


30 13 * * * /root/scripts/filesystem_usage.sh

요약

자동화하고 싶거나 자동화해야 하는 몇 가지 다른 작업을 생각할 가능성이 높습니다. 보시다시피 쉘 스크립팅을 사용하면 이러한 노력이 크게 단순화됩니다. 이 기사가 도움이 되었다고 생각되면 주저하지 말고 아래 양식을 통해 자신의 아이디어나 의견을 추가해 주세요.