1 # 2 # CDDL HEADER START 3 # 4 # The contents of this file are subject to the terms of the 5 # Common Development and Distribution License (the License). 6 # You may not use this file except in compliance with the License. 7 # 8 # You can obtain a copy of the license at usr/src/CDDL.txt 9 # or http://www.opensolaris.org/os/licensing. 10 # See the License for the specific language governing permissions 11 # and limitations under the License. 12 # 13 # When distributing Covered Code, include this CDDL HEADER in each 14 # file and include the License file at usr/src/CDDL.txt. 15 # If applicable, add the following below this CDDL HEADER, with the 16 # fields enclosed by brackets [] replaced with your own identifying 17 # information: Portions Copyright [yyyy] [name of copyright owner] 18 # 19 # CDDL HEADER END 20 # 21 # Copyright 2008 Sun Microsystems, Inc. All rights reserved. 22 # Use is subject to license terms. 23 # 24 #ident "@(#)functions.ksh 1.5 08/05/27 SMI" 25 # 26 27 PKG=SUNWscids 28 LOGFILE=/var/tmp/${RESOURCE}_logfile 29 TASK_COMMAND="" 30 RESOURCE_PROJECT_NAME="" 31 SCLOGGER=/usr/cluster/lib/sc/scds_syslog 32 LOGGER=/usr/bin/logger 33 34 syslog_tag() 35 { 36 ${SET_DEBUG} 37 print "SC[${PKG:-??}.${COMPONENT:-??}.${METHOD:-??}]:${RESOURCEGROUP:-??}:${RESOURCE:-??}" 38 } 39 40 scds_syslog() 41 { 42 if [ -f "${SCLOGGER}" ] 43 then 44 ${SCLOGGER} "$@" & 45 else 46 while getopts 'p:t:m' opt 47 do 48 case "${opt}" in 49 t) TAG=${OPTARG};; 50 p) PRI=${OPTARG};; 51 esac 52 done 53 54 shift $((${OPTIND} - 1)) 55 LOG_STRING=$(/usr/bin/printf "$@") 56 ${LOGGER} -p ${PRI} -t ${TAG} ${LOG_STRING} 57 fi 58 } 59 60 debug_message() 61 { 62 if [ "${DEBUG}" = "${RESOURCE}" -o "${DEBUG}" = "ALL" ] 63 then 64 SET_DEBUG="set -x" 65 DEBUG_TEXT=${1} 66 67 scds_syslog -p daemon.debug -t $(syslog_tag) -m \ 68 "%s" "${DEBUG_TEXT}" 69 else 70 SET_DEBUG= 71 fi 72 } 73 74 log_message() 75 { 76 debug_message "Function: log_message - Begin" 77 ${SET_DEBUG} 78 79 if [ -s "${LOGFILE}" ] 80 then 81 PRIORITY=$1 82 HEADER=$2 83 84 strings ${LOGFILE} > ${LOGFILE}.copy 85 86 while read MSG_TXT 87 do 88 scds_syslog -p daemon.${PRIORITY} -t $(syslog_tag) -m \ 89 "%s - %s" \ 90 "${HEADER}" "${MSG_TXT}" 91 done < ${LOGFILE}.copy 92 93 cat /dev/null > ${LOGFILE} 94 fi 95 96 debug_message "Function: log_message - End" 97 } 98 99 set_redirection() 100 { 101 debug_message "Function: set_redirection - Begin" 102 ${SET_DEBUG} 103 104 if /usr/bin/getent passwd ${USERID} | /usr/bin/awk -F: '{print $7}' | /usr/bin/grep csh > /dev/null 105 then 106 OUTPUT=">& ${LOGFILE}" 107 else 108 OUTPUT="> ${LOGFILE} 2>&1" 109 fi 110 111 debug_message "Function: set_redirection - End" 112 } 113 114 validate() 115 { 116 debug_message "Function: validate - Begin" 117 ${SET_DEBUG} 118 119 rc=0 120 121 # Note that group/user informix is an IDS requirement. Refer to 122 # http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic 123 # and in particular Installing IDS. 124 125 if /usr/bin/getent passwd informix > /dev/null 126 then 127 debug_message "Validate - User informix exists" 128 else 129 # SCMSGS 130 # @explanation 131 # The userid informix does not exist. 132 # @user_action 133 # You must create the userid informix. 134 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 135 "Validate - User informix does not exist" 136 rc=1 137 fi 138 139 if /usr/bin/getent group informix > /dev/null 140 then 141 debug_message "Validate - Group informix exists" 142 else 143 # SCMSGS 144 # @explanation 145 # The group informix does not exist. 146 # @user_action 147 # You must create the group informix. 148 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 149 "Validate - Group informix does not exist" 150 rc=1 151 fi 152 153 if [ "${USERID}" = "informix" ] 154 then 155 debug_message "Validate - Userid is informix" 156 else 157 pgroup=$(/usr/bin/getent passwd ${USERID} | /usr/bin/awk -F: '{print $4}') 158 159 if [ -n "${pgroup}" ] 160 then 161 if /usr/bin/getent group ${pgroup} | /usr/bin/awk -F: '{ if ($1 == "informix") print $3}' | \ 162 /usr/bin/grep "^${pgroup}$" > /dev/null 163 then 164 debug_message "Validate - Primary group for userid ${USERID} is informix" 165 else 166 if /usr/bin/getent group informix | /usr/bin/awk -F: '{print $4}' | \ 167 /usr/bin/grep ${USERID} > /dev/null 168 then 169 debug_message "Validate - Secondary group for userid ${USERID} is informix" 170 else 171 # SCMSGS 172 # @explanation 173 # The user is not a member of the group informix. 174 # @user_action 175 # Ensure the user is a member of the group informix. 176 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 177 "Validate - Userid %s is not a member of group informix" \ 178 "${USERID}" 179 rc=1 180 fi 181 fi 182 else 183 # SCMSGS 184 # @explanation 185 # The user is not a valid userid. 186 # @user_action 187 # Ensure the user name is correct. 188 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 189 "Validate - User %s is not a valid userid" \ 190 "${USERID}" 191 rc=1 192 fi 193 fi 194 195 if [ -d "${INFORMIXDIR}" ] 196 then 197 debug_message "Validate - ${INFORMIXDIR} exists" 198 199 if [ -x "${INFORMIXDIR}/bin/oninit" ] 200 then 201 debug_message "Validate - ${INFORMIXDIR}/bin/oninit exists and is executable" 202 else 203 # SCMSGS 204 # @explanation 205 # oninit was not found in ${INFORMIXDIR}/bin. 206 # @user_action 207 # Ensure that ${INFORMIXDIR} is the directory path 208 # where the Informix files are installed. 209 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 210 "Validate - %s/bin/oninit does not exist" \ 211 "${INFORMIXDIR}" 212 rc=1 213 fi 214 else 215 # SCMSGS 216 # @explanation 217 # ${INFORMIXDIR} does not exist or is not a directory. 218 # @user_action 219 # Ensure that ${INFORMIXDIR} is the directory path 220 # where the Informix files are installed. 221 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 222 "Validate - %s does not exist or is not a directory" \ 223 "${INFORMIXDIR}" 224 rc=1 225 fi 226 227 # Here, we check that the ${ONCONFIG} file contains 228 # the ROOTNAME variable, below is snipped sample 229 # ${ONCONFIG} file containing ROOTNAME. 230 # 231 # ROOTNAME rootdbs # Root dbspace name 232 233 if [ -f "${INFORMIXDIR}/etc/${ONCONFIG}" ] 234 then 235 debug_message "Validate - ${INFORMIXDIR}/etc/${ONCONFIG} exists" 236 237 if /usr/xpg4/bin/grep -qw ROOTNAME ${INFORMIXDIR}/etc/${ONCONFIG} 238 then 239 debug_message "Validate - ROOTNAME found in ${INFORMIXDIR}/etc/${ONCONFIG}" 240 else 241 # SCMSGS 242 # @explanation 243 # ${INFORMIXDIR}/bin/${ONCONFIG} is not a valid onconfig file. 244 # @user_action 245 # Ensure that ${INFORMIXDIR}/etc/${ONCONFIG} is a valid onconfig file. 246 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 247 "Validate - %s/bin/%s is not a valid onconfig file" \ 248 "${INFORMIXDIR}" "${ONCONFIG}" 249 rc=1 250 fi 251 252 # Here, we check that the ${ONCONFIG} file contains 253 # the ${INFORMIXSERVER} name, below is snipped sample 254 # ${ONCONFIG} file containing ${INFORMIXSERVER}. 255 # 256 # DBSERVERNAME demo_on 257 # 258 # Note that ${INFORMIXSERVER} is represented by "demo_on". 259 260 if /usr/xpg4/bin/grep -qw ${INFORMIXSERVER} ${INFORMIXDIR}/etc/${ONCONFIG} 261 then 262 debug_message "Validate - ${INFORMIXSERVER} found in ${INFORMIXDIR}/etc/${ONCONFIG}" 263 else 264 # SCMSGS 265 # @explanation 266 # ${INFORMIXDIR}/etc/${ONCONFIG} does not contain ${INFORMIXSERVER}. 267 # @user_action 268 # Ensure that ${INFORMIXDIR}/etc/${ONCONFIG} contains ${INFORMIXSERVER}. 269 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 270 "Validate - %s/etc/%s does not contain %s" \ 271 "${INFORMIXDIR}" "${ONCONFIG}" "${INFORMIXSERVER}" 272 rc=1 273 fi 274 else 275 # SCMSGS 276 # @explanation 277 # ${INFORMIXDIR}/etc/${ONCONFIG} does not exist. 278 # @user_action 279 # Ensure that ${INFORMIXDIR}/etc/${ONCONFIG} exists. 280 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 281 "Validate - %s/etc/%s does not exist" \ 282 "${INFORMIXDIR}" "${ONCONFIG}" 283 rc=1 284 fi 285 286 # Here, we check that the ${INFORMIXSQLHOSTS} file contains 287 # the ${INFORMIXSERVER} name, below is snipped sample 288 # ${INFORMIXSQLHOSTS} file containing ${INFORMIXSERVER}. 289 # 290 # demo_on ontlitcp lzmutt1a 9088 291 # 292 # Note that ${INFORMIXSERVER} is represented by "demo_on". 293 294 if [ -f "${INFORMIXSQLHOSTS}" ] 295 then 296 debug_message "Validate - ${INFORMIXSQLHOSTS} exists" 297 298 if /usr/xpg4/bin/grep -qw ${INFORMIXSERVER} ${INFORMIXSQLHOSTS} 299 then 300 debug_message "Validate - ${INFORMIXSERVER} found in ${INFORMIXSQLHOSTS}" 301 else 302 # SCMSGS 303 # @explanation 304 # ${INFORMIXSQLHOSTS} does not contain ${INFORMIXSERVER}. 305 # @user_action 306 # Ensure that ${INFORMIXSQLHOSTS} is contains ${INFORMIXSERVER}. 307 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 308 "Validate - %s does not contain %s" \ 309 "${INFORMIXSQLHOSTS}" "${INFORMIXSERVER}" 310 rc=1 311 fi 312 else 313 # SCMSGS 314 # @explanation 315 # ${INFORMIXSQLHOSTS does not exist. 316 # @user_action 317 # Ensure that ${INFORMIXSQLHOSTS} exists. 318 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 319 "Validate - %s does not exist" \ 320 "${INFORMIXSQLHOSTS}" 321 rc=1 322 fi 323 324 if [ "${rc}" -eq 0 ] 325 then 326 # SCMSGS 327 # @explanation 328 # The Informix Server validation was successful. 329 # @user_action 330 # None required, informational message. 331 scds_syslog -p daemon.info -t $(syslog_tag) -m \ 332 "Validate - Informix Server (%s) validation was successful" \ 333 "${INFORMIXSERVER}" 334 fi 335 336 debug_message "Function: validate - End" 337 return ${rc} 338 } 339 340 start_ids() 341 { 342 debug_message "Function: start_ids - Begin" 343 ${SET_DEBUG} 344 345 /usr/bin/rm ${LOGFILE} 2> /dev/null 346 347 get_state 348 check_ids debug 349 rc=$? 350 351 # Check_ids will return 0 if 352 # - The Informix Server is running 353 # - No blocked on "MEDIA FAILURE" or "HANG_SYSTEM" exists 354 355 if [ "${rc}" -eq 0 ] 356 then 357 # Turn off PMF restart if ${INFORMIXSERVER} has been manually started 358 /usr/bin/sleep ${START_TIMEOUT} & 359 /usr/cluster/bin/pmfadm -s ${RESOURCEGROUP},${RESOURCE},0.svc 360 361 # SCMSGS 362 # @explanation 363 # The specified Informix Server has been manually started. 364 # @user_action 365 # None required. Informational message. 366 scds_syslog -p daemon.notice -t $(syslog_tag) -m \ 367 "start_ids - Informix Server (%s) was manually started" \ 368 "${INFORMIXSERVER}" 369 370 return 0 371 fi 372 373 /usr/bin/su ${USERID} -c "${TASK_COMMAND} /usr/bin/env INFORMIXDIR=${INFORMIXDIR} INFORMIXSERVER=${INFORMIXSERVER} INFORMIXSQLHOSTS=${INFORMIXSQLHOSTS} ONCONFIG=${ONCONFIG} ${INFORMIXDIR}/bin/oninit -y ${OUTPUT} &" > /dev/null 374 375 rc=$? 376 377 if [ "${rc}" -eq 0 ] 378 then 379 # SCMSGS 380 # @explanation 381 # The specified Informix Server was started successfully. 382 # @user_action 383 # None required. Informational message. 384 scds_syslog -p daemon.info -t $(syslog_tag) -m \ 385 "start_ids - Informix Server (%s) started rc(%s)" \ 386 "${INFORMIXSERVER}" "${rc}" 387 else 388 # SCMSGS 389 # @explanation 390 # The specified Informix Server failed to start. 391 # @user_action 392 # Check the syslog for further messages. If possible the 393 # Solaris Cluster will attempt to restart the Informix 394 # Server. 395 scds_syslog -p daemon.error -t $(syslog_tag) -m \ 396 "start_ids - Informix Server (%s) failed to start rc(%s)" \ 397 "${INFORMIXSERVER}" "${rc}" 398 399 log_message error "start_ids rc(${rc})" 400 fi 401 402 debug_message "Function: start_ids - End" 403 return ${rc} 404 } 405 406 check_start() 407 { 408 debug_message "Function: check_start - Begin" 409 ${SET_DEBUG} 410 411 if [ -x /sbin/zonename ] 412 then 413 /usr/bin/pgrep -z ${ZONENAME} -f "$1 .*-R ${RESOURCE} " >/dev/null 2>&1 414 else 415 /usr/bin/pgrep -u root -f "$1 .*-R ${RESOURCE} " >/dev/null 2>&1 416 fi 417 418 rc=$? 419 420 debug_message "Function: check_start - End" 421 return ${rc} 422 } 423 424 get_state() 425 { 426 debug_message "Function: get_state - Begin" 427 ${SET_DEBUG} 428 429 # The Informix Dynamic Server has an operating mode which can be obtained 430 # by using the "onstat -" utility that prints the output header of the 431 # onstat utility. The format of the output header is as follows, 432 # 433 # Version--Mode (Type)--(Checkpnt)--Up Uptime--Sh_mem Kbytes 434 # 435 # "Version" will contain the product name and version number. 436 # "Mode" will contain the currrent operating mode. 437 # 438 # In addition to the operating mode, the database maybe blocked from 439 # performing any work. If the database is blocked, the blocked reason 440 # is also displayed in the onstat output header. 441 # 442 # Of interest to us is "Version", "Mode" and any blocked reason. 443 # 444 # Under normal operation the product name within "Version" will contain 445 # "IBM Informix Dynamic Server", after which "Mode" will reflect an 446 # appropriate operating mode. Blocked states only appear once a "Mode" 447 # is reached. 448 # 449 # The following shows two sample "onstat -" outputs, 450 # Before IDS is started. 451 # 452 # shared memory not initialized for INFORMIXSERVER 'demo_on' 453 # 454 # After IDS is started. 455 # 456 # IBM Informix Dynamic Server Version 11.10.FC1 -- On-Line -- Up 01:47:59 -- 29696 Kbytes 457 458 onstat_header=$(/usr/bin/su ${USERID} -c "${TASK_COMMAND} /usr/bin/env INFORMIXDIR=${INFORMIXDIR} INFORMIXSERVER=${INFORMIXSERVER} INFORMIXSQLHOSTS=${INFORMIXSQLHOSTS} ONCONFIG=${ONCONFIG} ${INFORMIXDIR}/bin/onstat - | /usr/bin/grep .") 459 460 if echo ${onstat_header} | /usr/xpg4/bin/grep -q "Informix Dynamic Server" 461 then 462 onstat_mode=$(echo ${onstat_header} | /usr/bin/sed -e 's/ -- Up.*$//' -e 's/^.*-- //') 463 464 if echo ${onstat_header} | /usr/xpg4/bin/grep -q "Blocked:" 465 then 466 onstat_blocked=$(echo ${onstat_header} | /usr/bin/sed -e 's/^.*Blocked://') 467 else 468 onstat_blocked="" 469 fi 470 fi 471 472 debug_message "Function: get_state - End" 473 } 474 475 check_ids() 476 { 477 debug_message "Function: check_ids - Begin" 478 ${SET_DEBUG} 479 480 LEVEL=error 481 [ "$1" = "debug" ] && LEVEL=debug 482 483 # Check if IDS is starting up. 484 if echo ${onstat_header} | /usr/xpg4/bin/grep -q "Changing data structure" 485 then 486 # SCMSGS 487 # @explanation 488 # The Informix Server database is starting up. 489 # @user_action 490 # None required. Solaris Cluster will restart the Informix Server 491 # so that it is managed by Solaris Cluster. 492 scds_syslog -p daemon.${LEVEL} -t $(syslog_tag) -m \ 493 "check_ids - Database Instance %s is restarting" \ 494 "${INFORMIXSERVER}" 495 496 return 100 497 fi 498 499 # Check if IDS is down. 500 if echo ${onstat_header} | /usr/xpg4/bin/grep -q -E "shared memory not initialized|WARNING: IBM Informix Dynamic Server is no longer running" 501 then 502 # SCMSGS 503 # @explanation 504 # The Informix Server database is down. 505 # @user_action 506 # None required. Solaris Cluster will restart the Informix Server. 507 scds_syslog -p daemon.${LEVEL} -t $(syslog_tag) -m \ 508 "check_ids - Database Instance %s is down" \ 509 "${INFORMIXSERVER}" 510 511 return 100 512 fi 513 514 # Check for any blocked states. 515 # Regardless of the onstat_mode, if a blocked state of "MEDIA FAILURE" or 516 # "HANG_SYSTEM" exists we will register a complete failure and indicate 517 # that the DBA needs to be involved. 518 519 if [ -n "${onstat_blocked}" ] 520 then 521 if echo "${onstat_blocked}" | /usr/xpg4/bin/grep -q -E "MEDIA_FAILURE|HANG_SYSTEM" 522 then 523 # SCMSGS 524 # @explanation 525 # The Informix Dynamic Server database has failed. 526 # @user_action 527 # Check the system log for error messages and contact your DBA. 528 # Solaris Cluster will restart the Informix Server. 529 scds_syslog -p daemon.${LEVEL} -t $(syslog_tag) -m \ 530 "check_ids - Database Instance %s has failed mode(%s) blocked(%s), contact your DBA" \ 531 "${INFORMIXSERVER}" "${onstat_mode}" "${onstat_blocked}" 532 533 return 100 534 fi 535 fi 536 537 case "${onstat_mode}" in 538 # Maintenance & Startup modes 539 "Quiescent"|"Administration"|"Single User"|"Initialization"|"Fast Recovery"|"Recovery") 540 541 rc=100 542 ;; 543 544 # The following IDS server modes are acceptable normal operation modes. 545 546 "On-Line"|"Read-only") # Normal operation modes 547 548 rc=0 549 ;; 550 551 # Any other IDS server modes are treated as a complete failure. 552 553 *) # Unknown modes 554 rc=100 555 ;; 556 esac 557 558 debug_message "check_ids - ${onstat_header}" 559 560 if [ "${LEVEL}" != "debug" ] 561 then 562 # While we tolerate some blocked states we will output a status message 563 # to Solaris Cluster if one is found. Nevertheless the resource remains online. 564 565 saved_rc=${rc} 566 567 # Check if GDS is still starting the resource. If GDS start has finished we'll set 568 # the Solaris Cluster resource status with the appropriate Mode and any Blocked state. 569 570 if ! check_start gds_svc_start 571 then 572 MESSAGE= 573 [ -n "${onstat_mode}" ] && MESSAGE="Mode:${onstat_mode}" 574 [ -n "${onstat_blocked}" ] && MESSAGE="${MESSAGE} Blocked:${onstat_blocked}" 575 576 /usr/cluster/bin/scha_resource_setstatus -R ${RESOURCE} -G ${RESOURCEGROUP} -s OK -m "${MESSAGE}" 577 fi 578 579 rc=${saved_rc} 580 581 fi 582 583 debug_message "Function: check_ids - End" 584 return ${rc} 585 } 586 587 stop_ids() 588 { 589 debug_message "Function: stop_ids - Begin" 590 ${SET_DEBUG} 591 592 MAX_STOP_TIMEOUT=$(/usr/bin/expr ${STOP_TIMEOUT} \* 70 \/ 100) 593 SECONDS=0 594 595 /usr/bin/su ${USERID} -c "${TASK_COMMAND} /usr/bin/env INFORMIXDIR=${INFORMIXDIR} INFORMIXSERVER=${INFORMIXSERVER} INFORMIXSQLHOSTS=${INFORMIXSQLHOSTS} ONCONFIG=${ONCONFIG} ${INFORMIXDIR}/bin/onmode -uky ${OUTPUT} &" > /dev/null 596 597 while [ "${SECONDS}" -lt "${MAX_STOP_TIMEOUT}" ] 598 do 599 get_state 600 601 if echo ${onstat_header} | /usr/xpg4/bin/grep -q "shared memory not initialized" 602 then 603 SECONDS=${MAX_STOP_TIMEOUT} 604 else 605 sleep 5 606 fi 607 done 608 609 # Note that the shutdown will be run in the background. As such the contents 610 # of ${LOGFILE} is not of interest so we will clear that file. 611 612 cat /dev/null > ${LOGFILE} 613 614 get_state 615 616 if ! echo ${onstat_header} | /usr/xpg4/bin/grep -q "shared memory not initialized" 617 then 618 /usr/cluster/bin/pmfadm -s ${RESOURCEGROUP},${RESOURCE},0.svc KILL 2> /dev/null 619 fi 620 621 debug_message "Function: stop_ids - End" 622 return 0 623 } 624 625 cleanup_ipc() 626 { 627 debug_message "Function: cleanup_ipc - Begin" 628 ${SET_DEBUG} 629 630 # Cleanup any IPC shared memory segments however only if 631 # 632 # - The shared memory segment(s) are owned by 633 # OWNER=root and GROUP=informix 634 # - The shared memory has no attached processes 635 # - The CPID and LPID processes are not running 636 637 flag= 638 639 if [ "${DEBUG}" = "${RESOURCE}" -o "${DEBUG}" = "ALL" ] 640 then 641 debug_message "IPC Status BEFORE removal of non-attached segments created by group informix" 642 /usr/bin/ipcs -mcopbZ | /usr/bin/grep " ${ZONENAME}$" > ${LOGFILE} 643 log_message debug ipcs 644 fi 645 646 /usr/bin/ipcs -mcopbZ | /usr/bin/grep " ${ZONENAME}$" | /usr/bin/awk ' \ 647 {if (NF == 13 && $5 == "root" && $6 == "informix" && $9 == 0 ) print $2,$11,$12; else \ 648 if (NF == 12 && $4 == "root" && $5 == "informix" && $8 == 0 ) print $1,$10,$11 }' | \ 649 while read SHMID CPID LPID 650 do 651 if /usr/bin/ps -p ${LPID} -o zone | /usr/bin/grep " ${ZONENAME}$" > /dev/null 652 then 653 debug_message "Informix SHMID: ${SHMID} - LPID ${LPID} is running" 654 else 655 if /usr/bin/ps -p ${CPID} -o zone | /usr/bin/grep " ${ZONENAME}$" > /dev/null 656 then 657 debug_message "Informix SHMID: ${SHMID} - CPID ${CPID} is running" 658 else 659 SHMID=$(/usr/bin/echo ${SHMID} | /usr/xpg4/bin/tr 'm' ' ') 660 661 # As the initial ipcs -mcopbZ is only a snapshot in time, Informix 662 # may have already cleaned up. Therefore the following attempt to remove a 663 # shared memory segment may fail with "not found". To prevent misleading 664 # console messages stdout/stderr is redirected to /dev/null. 665 666 /usr/bin/ipcrm -z ${ZONENAME} -m ${SHMID} > /dev/null 2>&1 667 668 debug_message "Informix SHMID: ${SHMID} - removed" 669 670 flag=deleted 671 fi 672 fi 673 done 674 675 if [ -n "${flag}" ] 676 then 677 # SCMSGS 678 # @explanation 679 # All the Informix shared memory segments that were not being 680 # used have been removed. 681 # @user_action 682 # None required. Informational message. 683 scds_syslog -p daemon.notice -t $(syslog_tag) -m \ 684 "All Informix non-attached IPC shared memory segments removed" 685 fi 686 687 debug_message "IPC Status AFTER removal of non-attached segments created by group informix" 688 689 if [ "${DEBUG}" = "${RESOURCE}" -o "${DEBUG}" = "ALL" ] 690 then 691 /usr/bin/ipcs -mcopbZ | /usr/bin/grep " ${ZONENAME}$" > ${LOGFILE} 692 log_message debug ipcs 693 fi 694 695 debug_message "Function: cleanup_ipc - End" 696 return 0 697 } 698