SharedIT | 묻고 답하기(AMP)

linux에서 로그인 시 자동으로 script 실행 문의

안녕하세요..

1. 리눅스에서 사용자가 로그인해서 작업한 내역을 기록하게 하고...
2. 로그인 시 자동으로 시스템 기본사항을 보여주게 하려고 합니다..

1번은 /ect/profile에
script /home/log/yyyymmdd_hhmmss_계정.txt
로 추가를 하였고..
2번은 login_script.sh 화일을 만들어 개방된포트, 메모리 사용량, 로그인 내역 등 기본정보를 보여주도록 쉘스크립트를 생성했습니다.

aaa 사용자가 로그인하면
/home/log/yyyymmdd_hhmmss_aaa.txt
파일이 생성되고 화면에 표기되는 내용이 기록이 됩니다.
그리고 2번도 실행됩니다.
그런데 작업을 종료하고 exit를 치면 2번이 한번 더 실행됩니다.
2번이 한번만 실행되는 걸 원하는데...
제가 워낙 야매로해서 원하는 답을 찾기 힘들어 질문을 올립니다.

현재 환경은 Centos 7이고
2번 login_script.sh 화일 등록은
/etc/profile.d/login_script.sh         -> 로그인하면 2번 실행, exit 실행 없음
/etc/bashrc                              -> 로그인 1번 실행, exit 1번 실행
/home/계정/.bash_rc                  -> 로그인 1번 실행, exit 1번 실행
이런식으로 실행되네요...

두번이 아니고 한번만 실행되었으면 합니다.

exit치면 로그아웃이 아니고 script가 종료되면서 bashrc나 ./bash_rc가 한번 더 실행되는 거 아닌가 싶습니다.
exit 한번 더 치면 정상적으로 로그아웃됩니다.

고수님들의 도움을 손길을 기다리겠습니다.

즐거운 주말 보내세요..
Tags : 태그가 없습니다.

3개의 답변이 있습니다.

한그루
  0 추천 | 5년 이하 전
저는 보통 /etc/rc.d/rc.local 화일에 등록합니다. 

wansoo | 5년 이하 전

/etc/rc.d/rc.local은 booting때 작동되죠~

빨간신발 | 5년 이하 전

그러네요.. 검색해보니 부팅시 실행되는 부분이네요... 저는 사용자가 로그인 시 시스템 상태를 간략히 보여주고 작업내역을 기록하는게 목적이라사요..
wansoo
  0 추천 | 5년 이하 전
1번용 스크립트와 2번용 스크립트 2개를 만들어서  초기 시작 설정 file들 위치에 각각을 등록해 두셨다는 내용일까요..? ^^

login할때 /etc/profile가 먼저 수행되고, /etc/profile에 의해 /etc/profile.d/ 아래의 *.sh 스크립트들이 자동 수행되게 되고요.

login할때 /bin/login  실행 file에 의해 /etc/profile가 실행되고 난 후에 각 사용자 home directory에 있는 .bash_profile, .bash_login, .profile 등의 file들이 수행되게 되고, 다음으로 사용자 home directory에 있는 .bashrc가 수행되고, 사용자 home directory에 있는 .bashrc file에 의해 /etc/bashrc file이 수행되게 되죠~

home directory에 있는 .bashrc file을 열어 보시면
/etc/bashrc file이 존재한다면 실행하라는 if 조건문이 보이실겁니다.

/etc/profile file을 열어 보시면  /etc/profile.d/ 아래의  *.sh 문들을 반복 수행하는 for 문도 찾을 수 있을 거고요.

빨간신발 | 5년 이하 전

/etc/profile.d/login_script.sh를 생성하면 로그인 시 2번 실행됩니다. /home/login_script.sh를 다른 특정위치에 옮기고 /etc/bashrc 또는 /home/aaa/.bash_rc 안에 /home/login_script.sh 명령을 추가하면 로그인하고 1회 실행되고 로그아웃하려고 exit를 입력하면 login_script.sh가 한번 더 실행됩니다. 그리고 exit를 한번 더 입력해야 로그아웃됩니다.

wansoo | 5년 이하 전

뭘 잘못 등록하셨을 것 같네요. 이중으로 등록 시켰을것 같습니다. 다른 곳에 등록한걸 모두 제거한 후에 /etc/profile.d/ 에만 넣어 두고 한번 해 보세요. /etc/profile.d/ 에 있는 *.sh file들은 따로 실행되도록 지정해 두지 않아도 자동으로 작동하게 되는데... 혹시 ~/.profile 등에서 작동되게 지정해 둔게 아닌가 하는 느낌도 드네요~

빨간신발 | 5년 이하 전

저도 혹시나 2중으로 등록되서 그럴까하고... 파일을 삭제하고 해당 구문을 주석처리해서 실행이 안되는 것을 확인하고 하나씩 해보아도... 위와같이 실행됩니다... 다른 서버 몇대에 해보아도 동일합니다. ㅠ,.ㅠ

wansoo | 5년 이하 전

그렇다면, /etc/profile.d/에 있는 스크립트를 제거하면 작동이 안되는게 확인이 될까요..? ^^ /etc/profile.d/에서도 스크립트를 제거했는데도 작동된다면 다른 곳에서 같은 역할을 하는 스크립트를 실행되게 분명히 지정해 둔 것일 거고, /etc/profile.d/에 있는 스크립트를 제거했을때 해당 역할이 작동되지 않는다면 작성한 스크립트에 문제가 있는 것으로 보입니다.
Genghis Khan
  0 추천 | 5년 이하 전
shell script  function 잘 활용하셔서
crontab 주기별 설정 하면 될듯한데요?
 

빨간신발 | 5년 이하 전

로그인하면 시스템 상황을 간략하게 보여주려는 의도라서... 크론탭으로 하면 로그인여부에 상관없이 혼자 실행하자나요... 사용자한테 현재 상황을 자동보고하고.. 작업내역을 기록하는 것에 목적이 있습니다...