질문 : 리눅스에서 서버가 켜지면서 자동적으로 프로그램이 실행되게 하려면 어떻게 해야하나요?
crontab에 * * * * * root 파일
이런식으로 등록했었는데요... 무한로프 도는 프로그램인데 crontab에 등록시키니 서버가
잘 안돌아가는 것 같더라구요.(로그인 이 안된다건가 하는.....)
자동적으로 실행되게 하는게 crontab밖에 없다면 서버에 뭔가 에러가 안나게 하거나
프로그램에서 컴퓨터가 켜있는 한 지속적으로 실행되면서 리눅스를 사용할수 있게 하는 방법
이 없을까요? (그러니까 a라는 프로그램이 있으면 b라는 유저로 들어와서 a라는 프로그램을
실행시키면 a라는 프로그램은 작업을 계속 수행하면서(무한 루프를 돌듯이) b라는 유저는 다
른 작업을 할 수 있게끔... 간단히 말하면 멀티태스킹;;)
답변 부탁드립니다.
crontab에 * * * * * root 파일
이런식으로 등록했었는데요... 무한로프 도는 프로그램인데 crontab에 등록시키니 서버가
잘 안돌아가는 것 같더라구요.(로그인 이 안된다건가 하는.....)
자동적으로 실행되게 하는게 crontab밖에 없다면 서버에 뭔가 에러가 안나게 하거나
프로그램에서 컴퓨터가 켜있는 한 지속적으로 실행되면서 리눅스를 사용할수 있게 하는 방법
이 없을까요? (그러니까 a라는 프로그램이 있으면 b라는 유저로 들어와서 a라는 프로그램을
실행시키면 a라는 프로그램은 작업을 계속 수행하면서(무한 루프를 돌듯이) b라는 유저는 다
른 작업을 할 수 있게끔... 간단히 말하면 멀티태스킹;;)
답변 부탁드립니다.
답변 : init.d에 넣어주는 것이 가장 좋은데요..
crontab은 자동적으로 프로그램을 실행하게 하는게 맞기는 한데요...
특정시간, 월, 일에 자동으로 그 프로그램을 실행하거든요.
위에 질문한 것처럼 실행하면
계속해서 프로세스가 생성되니 서버가 무리가 가겠지요???
나중에는 메모리를 다 소비하고 버벅댄다든가.....
크론탭에 등록한거 지우고요...
실행시키려는 파일을 부팅시에 자동으로 실행되는 스크립트나 inetd 혹은 xinetd에
넣어 놓으세요....
아파치, imap, sendmail, telnet, ftp 같은 서버데몬들은 거의 대부분 xinetd를 통해서
실행되거든요... 부팅시에 xinetd에 등록된 프로그램들은 자동으로 실행되지요...
다른 방법은 rc.local 에 등록시키는 방법이고요....
다른 하나는 init.d에 등록시켜 놓고 자동으로 실행하는 방법인데요..
이중에 init.d만 설명드릴게요..
xinetd에 넣는 것은 /etc/xinetd.d/ 디렉토리에 있는 설정예제와 /etc/xinetd.conf파일을
보고 공부하시고...
rc.local에 넣는 것은 별로 보기에 좋지 않으니 안쓰는게 낫지요..
init.d에 넣는 것은
우선 /etc/rc.d 라는 디렉토리가 있습니다. 그리고 가서 ls 해보면
[gas16@ns1 rc.d]$ ls
init.d rc rc.local rc.sysinit rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
[gas16@ns1 rc.d]$
이렇게 디렉토리들이 있거든요....
여기서 init.d 디렉토리들을 보면
[gas16@ns1 init.d]$ ls
anacron atd gpm ipchains killall lpd named nfs pcmcia random rusersd sendmail syslog ypbind
apmd crond halt kdcrotate kudzu mars-nwe netfs nfslock portmap rawdevices rwalld single xfs yppasswdd
arpwatch functions identd keytable linuxconf mysqld network opensshd qmail rstatd rwhod snmpd xinetd ypserv
[gas16@ns1 init.d]$
이런식으로 스크립트들이 있습니다.
이 스크립트들 참고해서 스크립트 파일을 만들어도 되고 귀찮으면 그냥 실행시키는 명령만
넣으세요..
간단하게 /usr/bin/a 라는 파일을 실행시키려면
#!/bin/sh
/usr/bin/a
이런식으로요...
그리고 저장한 다음에.... 실행권한을 줍니다.
스크립트 이름이 a_script라면
#> chmod 755 a_script
그냥 이대로 저장한다고 실행되는건 아닙니다ㅏ.
아까 여기서....
[gas16@ns1 rc.d]$ ls
init.d rc rc.local rc.sysinit rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
[gas16@ns1 rc.d]$
이렇게 있었지요??? rc0.d, rc1.d, ..... rc6.d 이런것들의 역할에 대해서는 알거라고 믿고.
텍스트모드로 부팅되는건 rc3.d고, x-window부팅시는 rc5.d, 종료가 rc6.d였던가??? 그럴겁니다.
여기 디렉토리들 안에다가 init.d안에 만든 스크립트를 복사해서 넣어주면 됩니다.
복사하면 괜히 디스크만 낭비하니 심볼릭 링크로 만들어 주면 되겠지요???
ln -s "/원본경로/하위디렉토리or파일" "/심볼릭링크등록할디렉토리or/전체경로/파일" //" "표는 빼주세요
#>ln -s /etc/rc.d/init.d/a_script /etc/rc.d/rc3.d/S97a_script
#>ln -s /etc/rc.d/init.d/a_script /etc/rc.d/rc5.d/S97a_script
이런식으로요..
init.d 안에 작성한 스크립트 파일이 문제없이 실행된다면 위에처럼 해주면
아무 문제없이 컴퓨터 부팅시에 자동으로 스크립트가 실행되고 프로그램이 실행됩니다
crontab은 자동적으로 프로그램을 실행하게 하는게 맞기는 한데요...
특정시간, 월, 일에 자동으로 그 프로그램을 실행하거든요.
위에 질문한 것처럼 실행하면
계속해서 프로세스가 생성되니 서버가 무리가 가겠지요???
나중에는 메모리를 다 소비하고 버벅댄다든가.....
크론탭에 등록한거 지우고요...
실행시키려는 파일을 부팅시에 자동으로 실행되는 스크립트나 inetd 혹은 xinetd에
넣어 놓으세요....
아파치, imap, sendmail, telnet, ftp 같은 서버데몬들은 거의 대부분 xinetd를 통해서
실행되거든요... 부팅시에 xinetd에 등록된 프로그램들은 자동으로 실행되지요...
다른 방법은 rc.local 에 등록시키는 방법이고요....
다른 하나는 init.d에 등록시켜 놓고 자동으로 실행하는 방법인데요..
이중에 init.d만 설명드릴게요..
xinetd에 넣는 것은 /etc/xinetd.d/ 디렉토리에 있는 설정예제와 /etc/xinetd.conf파일을
보고 공부하시고...
rc.local에 넣는 것은 별로 보기에 좋지 않으니 안쓰는게 낫지요..
init.d에 넣는 것은
우선 /etc/rc.d 라는 디렉토리가 있습니다. 그리고 가서 ls 해보면
[gas16@ns1 rc.d]$ ls
init.d rc rc.local rc.sysinit rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
[gas16@ns1 rc.d]$
이렇게 디렉토리들이 있거든요....
여기서 init.d 디렉토리들을 보면
[gas16@ns1 init.d]$ ls
anacron atd gpm ipchains killall lpd named nfs pcmcia random rusersd sendmail syslog ypbind
apmd crond halt kdcrotate kudzu mars-nwe netfs nfslock portmap rawdevices rwalld single xfs yppasswdd
arpwatch functions identd keytable linuxconf mysqld network opensshd qmail rstatd rwhod snmpd xinetd ypserv
[gas16@ns1 init.d]$
이런식으로 스크립트들이 있습니다.
이 스크립트들 참고해서 스크립트 파일을 만들어도 되고 귀찮으면 그냥 실행시키는 명령만
넣으세요..
간단하게 /usr/bin/a 라는 파일을 실행시키려면
#!/bin/sh
/usr/bin/a
이런식으로요...
그리고 저장한 다음에.... 실행권한을 줍니다.
스크립트 이름이 a_script라면
#> chmod 755 a_script
그냥 이대로 저장한다고 실행되는건 아닙니다ㅏ.
아까 여기서....
[gas16@ns1 rc.d]$ ls
init.d rc rc.local rc.sysinit rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d
[gas16@ns1 rc.d]$
이렇게 있었지요??? rc0.d, rc1.d, ..... rc6.d 이런것들의 역할에 대해서는 알거라고 믿고.
텍스트모드로 부팅되는건 rc3.d고, x-window부팅시는 rc5.d, 종료가 rc6.d였던가??? 그럴겁니다.
여기 디렉토리들 안에다가 init.d안에 만든 스크립트를 복사해서 넣어주면 됩니다.
복사하면 괜히 디스크만 낭비하니 심볼릭 링크로 만들어 주면 되겠지요???
ln -s "/원본경로/하위디렉토리or파일" "/심볼릭링크등록할디렉토리or/전체경로/파일" //" "표는 빼주세요
#>ln -s /etc/rc.d/init.d/a_script /etc/rc.d/rc3.d/S97a_script
#>ln -s /etc/rc.d/init.d/a_script /etc/rc.d/rc5.d/S97a_script
이런식으로요..
init.d 안에 작성한 스크립트 파일이 문제없이 실행된다면 위에처럼 해주면
아무 문제없이 컴퓨터 부팅시에 자동으로 스크립트가 실행되고 프로그램이 실행됩니다
댓글 없음:
댓글 쓰기