리눅스 정기점검 스크립트.. 

다른 사람들은 어떻게 구성했는지 많은 소스 참고하면 좀 더 좋아지겠지..


chksystem.sh


Resolution
  • In order to run a script as a specific user within cluster, you need to write a custom script resource (a wrapper script).
  • Script resources need to be in System V init script format with start, stop, and status functions.  Red Hat cannot provide guidance on how to start, stop, and status check the custom resource.
  • The following example will work if the apporpriate sections are changed:

1. RHCS에서 솔루션 가동용 스크립트를 구성하기 위한 기본은 System V 형태로 작성되야 하면 아래와 

   형태로 맞추어서 작성이 되어야 합니다. 

 
=================================

case "$1" in
         start)  == 솔루션 구동부분 ==
                logger 'Starting custom script resource'
                # Start your custom script here. Provide the user name and the script to be run.
                su <user name> -c <script to be run>
                exit 0
               ;;
         stop)   == 솔루션 정지부분 ==
              logger 'Stopping custom script resource'
               # stop your service
               exit 0
               ;;
         status) == 솔루션 상태체크 ==
                # Devise some test to tell whether your service is still running.

                 Look for a pid file or ps or something. 

                # This will be run ever 30 seconds so make it something not intensive
                <status check commands>    
               exit 0
               ;;
         *)
               echo $"Usage: {start|stop|status}"
               exit 1
        esac 

===========================================================

2 위의 형태대로 스크립트 작성이 완료 되었으면 아래의 형태로 /etc/cluster/cluster.conf 파일안에 

 넣어주셔야 합니다. 

 <service name="test-service">
     <script name="test-script" file="/etc/cluster/test.sh"/>
 </service>



3. 스크립트 구성과 cluster.conf 파일내에 적용이 완료되었으면 버젼을 업데이트 해주시고 모든 클러스터

  와 동일하게 맞춰주시기 바랍니다. 

  ccs_tool update /etc/cluster/cluster.conf 


4. 정상적으로 업데이트가 완료되었으면 클러스터 서비스를 enable 시켜주셔서 테스트를 진행해 보시기 

  바랍니다. 

  clusvcadm -e service:kud01 

===========================================================


출처 : https://access.redhat.com/knowledge/solutions/40490

'Linux 이야기. > 유용한 쉘스크립트' 카테고리의 다른 글

리눅스 정기점검 스크립트  (0) 2013.05.30
Remove All FCP Sysfs.  (0) 2011.08.29
zLinux FCP SCSI Remove Script  (0) 2011.08.29
Linux FileSystem Mount 체크  (0) 2011.03.30
앞장에서 FCP 영역에 대한 SCSI 디스크들을 모두 Remove 했다면.. 그와 관련된 FCP 디바이스들에 대한

Sysfs들 모두를 Remove 해줄 필요도 있다...굳이 재부팅 하지 않아도 된다는...^^

===================================================================

#!/bin/sh
#
# ------------------------------------------------------------------
# | REMOVES ALL ZFCP-RELATED SYSFS ENTRIES |
# | |
# | Author: Marc Beyerle (marc.beyerle@de.ibm.com), 12/12/2008 |
# | Copyright IBM Corp. 2008 |
# ------------------------------------------------------------------

SYSFS_DIRECTORY="/sys/bus/ccw/drivers/zfcp"

if [ -e "${SYSFS_DIRECTORY}" ]; then
 
   # change to the sysfs directory containing all zfcp adapters
     cd "${SYSFS_DIRECTORY}"
 
 # find all zfcp adapters
   ADAPTERS=$(find . -maxdepth 1 -name "0.0.*" | cut -c 3-)
else
   # the sysfs directory for the zfcp adapters does not exist
   ADAPTERS=""
fi

if [ -z "${ADAPTERS}" ]; then
   # print information
   echo -e "\nNo zfcp adapters found."
fi

# iterate over all zfcp adapters found
for ADAPTER in ${ADAPTERS}; do
    # change to this zfcp adapter's directory
    cd "${SYSFS_DIRECTORY}/${ADAPTER}"

# print information
echo -e "\nNow removing all sysfs entries of zfcp adapter ${ADAPTER}."

# find all wwpns of this zfcp adapter
WWPNS=$(find . -maxdepth 1 -name "0x*" | cut -c 3-)

if [ -z "${WWPNS}" ]; then
   # print information
   echo "No WWPNs found for zfcp adapter ${ADAPTER}."
fi

# iterate over all wwpns found
for WWPN in ${WWPNS}; do
   # change to this wwpn's directory
cd "${SYSFS_DIRECTORY}/${ADAPTER}/${WWPN}"

# find all luns of this wwpn
LUNS=$(find . -maxdepth 1 -name "0x*" | cut -c 3-)

if [ -z "${LUNS}" ]; then
   # print information
   echo "No LUNs found for WWPN ${WWPN}."
fi

# iterate over all luns found
for LUN in ${LUNS}; do
   # print information
   echo -n "Removing LUN ${LUN}... "

# remove this lun
echo ${LUN} > unit_remove

 if [ "${?}" -eq "0" ]; then
    # print success message (otherwise the error is printed above)
    echo "OK"
  fi
done

# change (again) to this zfcp adapter's directory
cd "${SYSFS_DIRECTORY}/${ADAPTER}"

# print information
echo -n "Removing WWPN ${WWPN}... "

# remove this wwpn
echo ${WWPN} > port_remove

  if [ "${?}" -eq "0" ]; then
      # print success message (otherwise the error is printed above)
      echo "OK"
  fi
   done
done
# print an empty line
echo
==================================================================

그냥 가져다 써도..잘 작동하네..
일반적인 zLinux의 디스크 운영은 DASD 디스크와 FCP (scsi) 디스크의 혼합해서 운영을 하는 것이 일반적이다.

LVM으로 구성된 SCSI 영역을 Rebooting 없이 SCSI 영역을 Remove 하고..Port 또한 정상적으로  Remove 할수 있는

유용한 스크립트인듯 하다.. (첨부파일 참조)

A.1 Set all SCSI devices offline
File name:

/usr/local/sbin/remove_scsi_devices.sh

A.1 Set all SCSI devices offline

File name:
/usr/local/sbin/remove_scsi_devices.sh

File contents:
#!/bin/sh
#
# ------------------------------------------------------------------
# | REMOVES ALL SCSI DEVICES |
# | |
# | Author: Marc Beyerle (marc.beyerle@de.ibm.com), 12/12/2008 |
# | Copyright IBM Corp. 2008 |
# ------------------------------------------------------------------
#
# the sysfs directory containing all scsi devices
SYSFS_DIRECTORY="/sys/class/scsi_device"

if [ -e "${SYSFS_DIRECTORY}" ]; then
   # change to the sysfs directory containing all scsi devices
   cd "${SYSFS_DIRECTORY}"

  # find all scsi devices
  DEVICES=$(find . -maxdepth 1 | grep -v "^.$" | cut -c 3-)
else
   # the sysfs directory for the scsi devices does not exist
   DEVICES=""
fi

# print an empty line
echo

if [ -z "${DEVICES}" ]; then
   # print information
   echo "No SCSI devices found."
fi

# iterate over all scsi devices found
for DEVICE in ${DEVICES}; do
     # change to this scsi device's directory
     cd "${SYSFS_DIRECTORY}/${DEVICE}/device"

# print information
echo -n "Removing SCSI device ${DEVICE}... "

# remove this scsi device
echo 1 > delete

if [ "${?}" -eq "0" ]; then
   # print success message (otherwise the error is printed above)
   echo "OK"
    fi
done
# print an empty line
echo
====================================================================
스크립트 수행후  lssci 명령어를 수행했을때 SCSI 디스크들이 보이지 않으면 정상..

그냥 가져다가 수행해도..잘 돌아가네..


리눅스에서 파일 시스템을 클러스터를 적용하여  Local 시스템에 대한 Mount가 잘 되었는지 확인이
필요할때가 있다. /proc/mounts 의 정보를 Gathering 하여 간략하게 스크립트화 해보자.

#!/bin/sh

####################################
#check filesystem mount
###################################
count=0

for i in $(seq 1 3)
do
if grep -qs "tsalv$i" /proc/mounts; then
        let count=count+1
else
    echo "tsalv0$i not mount"
fi
done;

if  [ $count -eq 3 ]
then
        exit 1
else
        exit 2
fi

exit 0

=======================================
쉘스크립트에 있어서 Return 값을 확인하여 정상적으로 모든 파일시스템이
마운트 되었는가를 확인한다.


파일시스템 체크
==================================================================

#!/bin/sh
#
# local_fs - check and mount local filesystems
#
PATH=/sbin:/bin ; export PATH

fsck -ATCp
if [ $? -gt 1 ]; then
  echo "Filesystem errors still exist!  Manual intervention required."
  /bin/sh
else
  echo "Remounting / as read-write."
  mount -n -o remount,rw /
  echo -n >/etc/mtab
  mount -f -o remount,rw /
  echo "Mounting local filesystems."
  mount -a -t nonfs,nosmbfs
fi
#
# end of local_fs

+ Recent posts