특정 시간에 동작하도록 만들려고 합니다.

shilf의 이미지

적절한 카테고리를 찾지 못해 그냥 씁니다.

제가 리눅스에 c로 스레드 서버를 짰습니다.
소켓으로 접속해서 파일 올리고 내리고 그러는건데요

궁금한게

특정 폴더에 파일을 다 집어넣는데
하루에 한번, 또는 일주일에 한번 새벽 몇시.
이렇게 특정 시간이 되면
그 안에 파일들을 다 검사해서 삭제할려고 합니다.
db를 따로 구축해서 파일을 올린 시간은 알고 있습니다.
문제는 몇일 몇시 이렇게 동작할려면
time 관련 함수로 체크해서 그 날짜 시간이 되면 동작하도록 해야하지 않습니까

지금 생각으로는 서버가 while(1)에서 클라이언트의 접속을 기다리다가 접속되면 bind하는데
그안에다가 체크해서 지우는 부분을 만들려고 합니다.

이렇게 짜면 계속 체크해서 부하가 많이 걸리지는 않을까요
고수님들의 답변을 기다립니다.

익명 사용자의 이미지

select 의 타임아웃 값을 줘서..
타임아웃일 경우
시간 체크후..
해당시간이 되면 지우기 하고..
하면 될듯.. 싶네요..

ixevexi의 이미지

그냥 cron 따로 쓰시면 안되는 이유가 있을까요??

C++, 그리고 C++....
죽어도 C++

아빠곰의 이미지

프로그램 내에서 어떻게 하면 좋을지는 잘 모르겠습니다. 하지만 리눅스 시스템의 cron을 이용하시면 쉽지 않을까요? /etc/crontab 을 열어보시면, 특정 날짜, 요일, 월, 등의 단위로 어떤 작업을 할 수 있게 할 수 있습니다. 예를들어 매일 아침 7시에, 서버 시간설정을 업데이트하라는 명령을 다음 한줄을 추가함으로서 내릴 수 있죠.

00 7 * * * root /etc/init.d/ntpdate restart

----
아발발다빠따반반나다발딸발발다빠따따맣밤밤따받따발발다따밝다발발다빠따따밤반다빠따다맣밥발
발다따밥다발발다따박다발발다빠따따밞밭밭다따다맣아희

익명 사용자의 이미지

cron을 쓰면..
쓰레드 서버 말고..
디렉토리에.. 지우는.. 프로그램을 하나 더 돌려야 함..

익명 사용자의 이미지

Anonymous wrote:
cron을 쓰면..
쓰레드 서버 말고..
디렉토리에.. 지우는.. 프로그램을 하나 더 돌려야 함..

cron 은 root 권한으로 돌리는 경우가 대부분이라

rm -rf 로도 충분히 지워집니다만...

ssehoony의 이미지

네 보통 그런 경우 cron 을 사용하지만, 데몬을 만드는게 좋은 경우가 있긴 하죠.
그럴 경우 sleep 함수를 이용하는 방법도 있고, 시그널중 alarm 을 사용하는 방법도 있습니다.

저는 시그널 사용을 가급적 피하는 편이라
while(1) 의 무한루프 안에 sleep 을 1초 간격으로 주고 기다리는 시간이 됐는지 테스트하는 방식을 사용합니다.
주의 하실걸 해당시간이 됐는지 여부를 == 로 단순히 비교해서는 안되고 범위를 정해서 약간 넓게 설정하셔야 한다는거죠.
그리고 한번 실행후 다음 루프 때 또 실행하는 것을 막기 위해 해당 타이밍에 이미 실행을 했는지 여부 플래그도 두셔야 하고, 나중에 그 플래그를 다시 리셋도 해줘야합니다.

아니면 현재 시간과 다음 실행 시간과의 차를 계산해서 한번에 장시간 sleep하는 방법도 있지요. 이런 방법은 sleep 중에는 스케줄러의 상황 로그를 남길 수 없다는 단점이 있지요.

shilf의 이미지

정말 crontab라는게 있군요.
그거에 대해 좀더 알아볼려구요.

마지막으로 하나더 궁금한건
제가 파일을 삭제할때 db에 접속해서 전송된 시간을 알아내고
시간이 지난 파일만 삭제해야하니까
어쩔수 없이 프로그램을 하나 더 써야할꺼 같은데

이렇게 새로 짜는 프로그램은 background로 돌릴 필요가 없지 않습니까?
서버는 background로 돌아가는데
이프로그램은 특정시간에 (하루한번) 실행되고 바로 종료되면 되니까
그냥 c로 짜서 컴파일 한다음에
crontab에다가 00 4 * * * root /etc/deletefiles(예를들어 컴파일한 이름)
이런식으로 하면 되지 않을까요?

ssehoony의 이미지

shilf님께서 말씀하신 것 처럼 crond 를 사용하는 겁니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.