[완료] 주기적으로 틀림없이 실행되는 프로그램을 만들려면 어떻게

always19의 이미지

주기적으로 데이터를 가져오고 SMS를 보내는 프로그램을 만들어야 합니다.
구체적으로 말해서, Google API를 이용해 Google Calendar에서 모든 약속의 content 부분을 가져오고, 그 부분에 SMS 보낼 내용이 들어있는 경우, SMS를 보내주는 프로그램을 만들어야 합니다. 매 분마다 2시간 이후에 시작하는 약속을 검색하게 만들 생각입니다.

프로그램이 갖춰야 할 기능으로는

1. SMS 정보를 SMS를 보내기 직전에 가져와야 하므로 약 1분 이내의 주기로 계속 실행되는 프로그램이어야 합니다.

2. 한 프로그램이 실행된 채로 threads 없이 주기적으로 SMS 정보를 가져오는 것은 바람직하지 않습니다. 어떤 이유에서 어느 시간 동안 프로그램 실행이 지연됐을 경우에, 지연시간이 유지되면 안되기 때문입니다. SMS 정보를 가져오는 작업이 한동안 지체되더라도, 이후 정상적인 작업을 하는 타이밍에 영향을 주면 안됩니다.

3. 매 분, 2시간 이후 약속을 가져와야 합니다. 따라서, 새로 Google Calendar로 query를 보낼 때마다 시각을 업데이트해야 합니다. 아주 정확한 주기로 작업을 수행할 필요는 업지만, 각 작업마다 query가 포함하는 시각 변수는 정확해야 합니다. 빼먹거나 중복된 시각으로 query하면 안됩니다.

가장 좋은 방법은 Real Time OS에서 실행하는 것이겠죠?
하지만 프로그램이 실행될 OS는 솔라리스 또는 리눅스 입니다.

구현 방법으로 3가지를 생각해봤습니다.

1. cron같은 OS의 스케쥴러 서비스를 이용하는 것입니다. 1분마다 프로그램을 실행시키면, 위 요구조건을 만족시킬 수 있겠죠?
OS 시계대로 동작한다는 것이 제일 큰 장점이겠죠? 다만, 매 시각 프로그램을 실행시키는 것에 대한 overhead가 별로 없는 거라면 좋겠습니다. 다른 구현 방법에 비해 어떤가요?

2. thread를 여러 개 만들어서 그 thread들이 매 시각 start하게 만들 수도 있을까요? sleep()으로 주기를 조정하는 것은 안될 것 같습니다. 조그만 시간 에러들이 쌓여서 나중에는 큰 시간차를 만들까 걱정됩니다. 걱정할 일이 맞나요?

3. c인지 java인지 alarm이란 api가 있는 것 같은데, 이걸 이용한 구현은 어떨까요?

혹시 다른 방법도 있을까요? OS 스케쥴러를 이용하는 것이 가장 적합한 방법으로 보이나요?
고맙습니다.

feanor의 이미지

cron을 쓰시는 게 맞고, 직접 구현하신다면 sleep 같은 함수를 쓰되 상수 시간을 쉬는 게 아니라 마지막으로 성공한 시간의 timestamp와 현재 시간을 비교해서 쉬게 하면 시간 에러가 누적되지 않을 것입니다.

Java API 중에는 Quartz가 비슷한 일을 합니다.
http://www.opensymphony.com/quartz/

댓글 달기

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