CentOS 서버 종료시 로그를 원격지 서버로 복사하는 방법이 있을까요?

prankenmk2의 이미지

안녕하세요.

AWS 서비스를 이용중인데 비용절감을 위해 심야에는 서비스 서버중 일부를 종료할 예정입니다.

해당 적업을 하면서 문제가 웹로그를 수집하기위해 서버가 종료되기전 원격지로 로그를 전송해야 하는데 방법을 모르겠습니다.

/etc/rc.d/rc0.d 디렉토리 안에 scp로 로그를 보내는 스크립트를 만들어도 영 동작을 하질 않네요.

네트워크가 끊어져서 못보내나 싶어 제일 앞에 echo `date` >> /tmp/log 로 날짜를 찍게 해도 안 찍히는 걸로 봐선

아예 스크립트 자체가 실행되지 않는거 같습니다.
( /etc/rc.d/init.d/script 로 스크립트를 만들고 /etc/rc.d/rc0.d 안에 S99script 라는 이름으로 심볼릭 링크를 걸었습니다.)

rc0.d 디렉토리에 스크립트를 넣고 따로 해줘야 하는 작업이 있을까요?

또는 서버 종료시 스크립트가 자동실행되는 방법이 있을까요?

조언 부탁드립니다.

감사합니다.

chanik의 이미지

rc?.d 디렉토리 안에 S??, K?? 스크립트가 여러 개 있을 때,
S, K 뒤의 번호는 실행우선순위를 가리키며 낮은 번호가 더 우선순위가 높습니다.

우선 K?? 스크립트가 우선순위에 따라 실행되고 (K??xxxx stop 식으로 실행됨),
그 다음엔 S?? 스크립트가 우선순위에 따라 실행됩니다 (S??yyyy start 식으로 실행).

제가 쓰는 CentOS-5.9의 /etc/rc0.d 디렉토리를 보니 K90network 등 다수의 K?? 스크립트와 함께
아래의 두 개의 S?? 스크립트가 보입니다.

- S00killall
- S01halt

K?? 스크립트가 모두 실행되면서 각종 서비스를 내리고 나면 위의 두 스크립트가 실행되는데,
S00killall 스크립트가 실행되면 시스템의 모든 프로세스가 종료되고 S01halt가 실행되면 컴이 꺼지겠죠.

S99script라는 이름으로 스크립트를 만들면 위의 두 스크립트가 실행된 다음에야 실행하겠다는 뜻이 됩니다.
컴이 꺼진 다음일테니 아예 실행될 기회조차 없겠죠.

네트웍을 종료시키는 K90network 스크립트보다는 빨리 실행되어야 할테니
K89script 정도로 이름을 바꿔보시면 될 것입니다.

사용중이신 배포판에 따라 스크립트의 이름이나 우선순위번호가 다를테니
스크립트의 우선순위는 rc0.d 디렉토리 구성을 보시고 적절히 판단하시면 되겠습니다.

prankenmk2의 이미지

답변 감사합니다!!

알려주신데로 K10script 정도로 이름을 바꿨는데도 전혀 실행이 되질 않네요.

뭐가 문제인지 모르겠네요..

그냥 S00killall 스크립트 앞에 넣을까도 생각중입니다 ㅠ

chanik의 이미지

K10script 내용물을 민감한 부분 제거하고 올려주실 수 있나요?

[1] 종료스크립트인 K?? 스크립트는 stop 파라미터와 함께 실행됩니다.
만약 아래와 같이 start 형태로 작성하셨다면 실행되더라도 원하는 동작을 하지 않습니다.

  .
  .
case "$1" in
  start)
    echo started!!
    # DO SOMETHING DESIRABLE ...
  ;;
esac
  .
  .

[2] 혹시 테스트를 위해 init 0 명령으로 컴을 종료시키지 않고
어차피 결과확인을 해야 하니 init 6 명령으로 재부팅중이라면
/etc/rc0.d/K10script 는 실행되지 않습니다.

prankenmk2의 이미지

자세한 답변 감사합니다.

현재 테스트하고 있는 스크립트 입니다.

#!/bin/bash

echo "$1" >> /tmp/shutdown-arg.log
case "$1" in
start)
echo `date` >> /tmp/date.log
LOG_DIR="/var/log/httpd"
LOG_FILE="$LOG_DIR/access_log"
DST_IP="10.10.10.10"
DST_DIR="/tmp/remote-log"
scp -P 2122 $LOG_FILE $DST_IP:$DST_DIR/
;;
stop)
echo `date` >> /tmp/date.log
LOG_DIR="/var/log/httpd"
LOG_FILE="$LOG_DIR/access_log"
DST_IP="10.10.10.10"
DST_DIR="/tmp/remote-log"
scp -P 22 $LOG_FILE $DST_IP:$DST_DIR/
;;
*)
echo $"Usage: $0 {start|stop}"
exit 1
;;
esac

lrwxrwxrwx 1 root root 24 Oct 17 13:38 K50httpd-log-send -> ../init.d/httpd-log-send

으로 설정했습니다.

혹시 몰라 start, stop에 모두 넣었으며 직접 실행시 정상 작동합니다.
/etc/rc.d/rc0.d, /etc/rc.d/rc6.d에 모두 설정하고 shutdown, reboot해도 동작하지 않습니다 ㅠ

최소한 실행이 됬다면 "/tmp/shutdown-arg.log" 로그가 있어야 하는데 파일이 생기지 않는 것으로 보이 스크립트 자체가 실행되지 않는거 같습니다.

친절한 답변 거듭 감사합니다!!

chanik의 이미지

bushi님의 답변을 보고 확인해보니 K 스크립트에 대해 제가 잘못알고 있었군요.
잘못된 정보로 혼란을 끼치게 된 것 사과드립니다.
잘 해결하시기를 바랍니다. ^^

dgkim의 이미지

시스템에 따라, /tmp 영역은 시스템 부팅 후 비워져 있을 수 있습니다.

--
http://www.dgkim.net/

bushi의 이미지

rc 스크립트는 rc{현재runlevel}.d/K* 를 수행한 다음 rc{새로운runlevel}.d/S* 를 수행합니다.
따라서 작성하신 그 스크립트는 rc{3,4,5,6}.d/ 에 K어쩌고 라고 있어야하고, network shutdown 하는 스크립트보다 번호가 작아야 합니다.

제대로 하시려면,
chkconfig 가 요구하는 형식에 맞춰 스크립트 헤더를 잘 작성하신다음 init.d/ 에 복사해 넣으시고,
chkconfig 유틸을 사용해서 원하는 runlevel (들)에 enable/disable 을 해주시면 알아서 링크되고 언링크 됩니다.
스크립트 예제는 init.d/ 에 있습니다.

prankenmk2의 이미지

chkconfig 형식 맞춰서 K05httpd-log-send 로 런레벨 2345에 전부 등록했는데도 스크립트가 동작을 하질 않네요.

당최 이유를 모르겠네요 ㅠ

dgkim의 이미지

종료 rc0, 재부팅 rc6 즉, runlevel 06에 등록해야 하겠지요.

--
http://www.dgkim.net/

prankenmk2의 이미지

원인을 찾았습니다!!

알려주신 답변들과 구글링으로 찾았습니다.

원인은 /etc/lock/subsys/[스크립트명] 파일이 없어서 서버가 종료되어도 스크립트가 실행되지 않았습니다.

/etc/rc.d/rc 파일을 열어보니 /etc/lock/subsys에 스크립트 명의 파일이 없으면 스크립트를 실행시키지 않는거 같습니다.

그래서 스크립트를 아래와 같이 변경했습니다.


case "$1" in
start)
/bin/echo `date` >> /tmp/shutdown-start-date.log
touch /var/lock/subsys/httpd-log-send
;;
stop)
/bin/echo `date` >> /tmp/shutdown-stop-date.log
LOG_DIR="/var/log/httpd"
LOG_FILE="$LOG_DIR/access_log"
DST_IP="10.10.10.10"
DST_DIR="/tmp/remote-log"
/usr/bin/scp -P 22 $LOG_FILE $DST_IP:$DST_DIR/ >> /tmp/shutdown-scp.log 2>&1
;;
*)
/bin/echo $"Usage: $0 {start|stop}"
exit 1
;;
esac

이런식으로 바꾸고 (로그 찍는 부분은 무시해주세요)

런레벨 2345에선 실행 (S05script)
런레벨 06에선 실행x (K05script)
하니까 정상동작 합니다!

답변 주심 모든 분들 감사합니다!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.