리눅스 서비스로 자동실행 시 문제점입니다.

sootoo23의 이미지

임베디드 리눅스 시스템에서 개발중에 있는데요...

어플리케이션을 데몬으로 실행을 하게되면
어플리케이션의 콘솔 기능을 사용하지 못하게 됩니다.

찾아보면, 데몬으로 실행할 경우 tty제어는 못한다고 나오는데..

그럼 tty를 제어하는 어플리케이션은 자동실행하려면 어떻게 해야하나요?

* 참고로 systemd OS로, /etc/init.d/ 폴더에 rcS 같은 script로 직접 실행하는 방식은
동작이 안됩니다. (inittab도 없음)
* rc3.d 폴더에 링크를 걸어 실행할 경우 데몬으로 실행되어 콘솔기능을 사용하지 못합니다.

익명 사용자의 이미지

음....
보통 데몬은 만들때는 fork()를 사용하여 부모프로세스는 종료하고,
자식 프로세스로 동작하게 만듭니다.

sootoo23의 이미지

음.. 데몬은 단순히 백그라운드에서 항상 실행되는 놈인데..
그럼..보통의 데몬은 fork를 사용하여 부모를 종료하고 자식으로 동작하는 이유가 뭘까요?

자식프로세스의 경우 Service로 실행되어도 tty 터미널 제어를 할 수 있나요?
일단 한번 해보겠습니다.

익명 사용자의 이미지

데몬이 백그라운드로 실행되고 tty 터미널 제어한다는 말이 무슨뜻인지 잘 모르겠습니다.
혹시 어떤 상황인지 설명 해 주실 수 있는지요?

sootoo23의 이미지

백그라운드로 항상실행되는 프로그램 = 데몬

터미널을 제어한다는 말은
제가 만든 Application에서 ttyS0 를 사용해 Console UI를 제공하고,
사용자가 특정 명령을 이용하여 설정, 감시, 제어 등을 할 수 있도록
Console 기능을 제공하고 있습니다.

익명 사용자의 이미지

아~ 이해했습니다.
저 같은 경우는 일반 계정을 만들고 /etc/passwd 에서 해당 계정의 shell을 제가 만든 Console UI 바꾸는 식으로 했었습니다.
그러면 굳이 ttyS0를 따로 제어한다거나 데몬을 실행 시킬 필요가 없습니다.

sootoo23의 이미지

일단, fork()로 자식프로세스를 생성하여 테스트 해보았지만, 문제는 동일합니다.

죄송하지만,
/etc/passwd에서 해당 계정의 shell을 제가만든 console UI로 바꾸는 식이라는 말이
이해가 가지 않습니다.

자세히 설명부탁드립니다!!..

익명 사용자의 이미지

fork()는 무시하세요. 제가 잘 못 이해 했습니다.

예를 들면 이런 간단한 shell이 있다고 하면

#include <stdio.h>
 
int main () {
   char str1[20];
 
   while(1)
   {
   	printf("input command : ");
   	scanf("%s", str1);
 
   	printf("command :  %s\n", str1);
   }
 
   return 0;
}

이걸 testcli 라고 컴파일 후에 /bin 디렉토리에 복사 해놓았다고 가정 하겠습니다.

그러면 /etc/passwd 에다가

//수정전
user1:x:1000:1000:user1,,,:/home/user1:/bin/bash
 
//수정후
user1:x:1000:1000:user1,,,:/home/user1:/bin/testcli

이렇게 변경 후 user1 ID로 로그인 하면 만든 프로그램이 실행이 될 꺼에요

sootoo23의 이미지

passwd에 제 Application을 넣으니까 전부다 잘되네요.
감사합니다.

죄송하지만, 한가지 더 여쭤볼게 있는데요.
/etc/passwd로 제 App을 실행하니까 제대로 root로 로그인 되지않아
FTP, Linux 명령을 사용할 수 없게 되는데

혹시 이것도 다른 방법이 있을까요?

익명 사용자의 이미지

이런 상황에서는 setuid 나 setgid를 활용해야 합니다

sootoo23의 이미지

좋은 답변 감사드립니다.!

sootoo23의 이미지

음.. 일단 알려주신대로 사용하고 있습니다.
모든 Application이 잘 실행 되고 있으나,

FTP의 경우 로그인 할 경우 로그인은 되나 아무폴더도 보이지 않게 됩니다.
그러나 반대로 /etc/passwd파일에 쉘은 원래되로 /bin/sh로 지정할 경우

로그인하게되면 모든폴더가 잘 보이고 R/W도 잘 됩니다.

----------------------------------------------------------------------
이와 관련하여 방금 테스트 한결과..
아직 정확한 원인은 모르겠으나..

/etc/passwd 파일의 root 계정의 home dir을 / 로 잡아주니
모든 폴더에 접근이 가능하게 됬습니다.

익명 사용자의 이미지

거기까지 생각은 안했네요...

해당 계정으로 FTP로그인 용도로도 사용 하시려면, 다시 처음부터 다시 생각을 해봐야 할 것 같습니다.

FTP를 어떤 용도로 쓰는지 모르겠지만, FTP 전용 계정을 추가하던가, 아니면 다른 방법을 찾아 봐야 할 것 같습니다.

댓글 달기

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