유저 트래킹(로그인-아웃 시간재는) 하는 Shell script 인데 잘 안되네요 ...
글쓴이: Sailor_moon / 작성시간: 수, 2012/01/18 - 1:59오후
안녕하세요 .... 지금 몇시간째 헤메이는 건지 모르겠습니다.
프로그램은 이렇습니다. 60초의 슬립을 가지구요 , 계속 무한 루프로 실행 되면서,
만약에
spy.sh "Jenifer"
이런식으로 인자를 받아왔으면 ,
Jenifer 란 사람의 id 를 /etc/passwd 에서 찾아내어,
who 로 접속 시간을 파악하고, 접속한 시간을 리턴해주는 프로그램인데 ...
이 로그인 타임 찾는게 정말 어렵습니다....
언제 로그인 했는지 , 언제 로그아웃 했는지, 그럼 로그인한 시간이 얼마인지 찾아내야 하는것인데.
제 아이디어는,
먼저 who 로 검색해서 나온다는 것은 로그인 했다는 거니까 ,
(1)그 로그인 타임을 가져오고 (문제는 정확히 날짜와 시간만 필요한데 컷이 잘 안됩니다 .... )
프로그램이 60 초마다 슬립하기 때문에
(2)60초가 지난 뒤에는 계속 체크하다가 , 로그아웃이 딱 되어서 더이상 who 에 나오지 않으면,
(3)그때 이제 현재 시간을 리턴하는것 . (date 를 써야할거같은데 ...또 어떻게 잘라야 할지 .. cut 을 잘 못써서 애먹습니다 ... )
(4)그 뒤 두 시간의 갭을 측정 하는것 .
....계속 헤메이고 있어요 .... 도와주셔요 ...
혹 더 좋은 로직이 있다면 소개해 주시면 감사드리겠습니다.
#!/bin/bash # Script name: spy.sh while true do for arg in "$@" do #This grab command will returns matched use name grab=`cat /etc/passwd | grep $arg |wc -l` if [ $grab != 0 ]; then #matched user found case userid=`cat /etc/passwd | grep $arg | cut -d ':' -f1` exist=`who | grep $userid | wc -l` #making existing tag logged_stat=0 echo $exist if [ $exist != 0 ]; then #record user logged in time echo "here again" logged_in=`who | grep $userid` # | rev | cut -d " " -f1` #"여기도 그냥 컷으로 놔두어 버렸습니다" $logged_stat=1 elif [ $logged_stat != 0 ]; then echo "여기를 구현 해야하는데 .... " logged_out=date fi else echo "not found even in /etc/passwd" fi sleep 60 # Running in every minutes done done
Forums:
last 명령어를 참고하세요~
last 명령어를 참고하세요~
댓글 달기