안녕하세요 깍돌이 입니다 .아파치를 재시작하거나 시작 할때 해당 오류를 만나는 부분들이 꽤있는데요 

아주 단순한 케이스이지만 기록 해놓으려고 작성하게 되었습니다.

 

NCP(NaverCloudPlatform) & Init Script

NCP 클라우드 에서는 VM 을 생성시 Init Script 를 사용하여서 서버가 "운영중"으로 들어오기전에 하고싶은 작업들을 실행할수가 있습니다.  제가 하려고 했던 작업 중 일부분 입니다.

# 아파치 설치 
sudo -s yum -y install httpd
# 아파치 시작 
sudo -s systemctl start httpd
# 아파치 Root 디렉토리 변경
sudo -s sed -i 's/var\/www\/html/home1\/ncloud\/index.html/g' /etc/httpd/conf/httpd.conf
# 아파치 재시작  
sudo -s systemctl restart httpd

작성해놓았지만 동작이 되지않았기에 직접 VM에 들어가서 확인해보니

 

"Job for httpd.service failed because the control process exited with error code"

에러가 발생 중이였습니다. 뒤에 에러 코드에 보면 systemctl status httpd.service 를 보라는 문구가 있죠

 

Systemctl status httpd.service

원래 가장 친절한 에러 문구부터 파악을 해야겠죠

보시면 딱히 어떤 에러가 있는지는 확인이 쉽게 되지는 않게 나타나고 있습니다. 저희는 재시작 혹은 실행 에서 오류가 났기 때문에 해당 status에서 눈여겨 볼 점은 ExecStart 인데요

 

/usr/sbin/httpd 를 통해서 직접 실행을 해봅시다

 

ExecStart - /usr/sbin/httpd

결과 : '/home1/ncloud/index.html' is not a directory , or is not readable 

-> 제가 위에서 변경 하였던 오류였네요 루트 경로를 /var/www/html -> /home1/ncloud 로 했어야 하는데 index.html 까지 써버려서 폴더가 아니기 때문에 아파치의 welcome-list 필터링에서 오류가 발생하였습니다.

 

sudo -s sed -i 's/var\/www\/html/home1\/ncloud/g' /etc/httpd/conf/httpd.conf

 

/home1/ncloud로 변경 후 다시 시도시 (welcome-list에 의해서 index.html 을 찾을 겁니다)

 

정상적으로 나타났네요

 

* 별첨으로 Ubuntu와 Centos에서의 Apache (아파치) 설치 및 루트 디렉토리 변경이 조금씩 다르기 때문에

해당 관련 shell 을 첨부합니다.

 

Ubuntu 16.04-64 Server

#!/bin/bash

sudo -s apt-get update
sudo -s apt-get -y install apache2
# Create Apache New Index Folder
mkdir /home1/ncloud/www

# Change Apache Root Directory
sudo -s sed -i 's/var\/www\/html/home1\/ncloud\/www/g' /etc/apache2/sites-available/000-default.conf

# Change Apache Root Direceotry Access Authority
sudo -s sed -i 's/denied/granted/g' /etc/apache2/apache2.conf

# authority change 
sudo -s chmod -R 775 /home1
sudo -s chmod -R 775 /home1/ncloud
sudo -s chmod -R 775 /home1/ncloud/www
sudo -s chmod -R 775 /home1/ncloud/www/index.html

# Restart Apache
sudo -s /etc/init.d/apache2 restart

 

Centos 7.3-64

#!/bin/bash

# Apache Install
sudo -s yum -y install httpd
# Apache start
sudo -s systemctl start httpd

# Create Apache New Index Folder
mkdir /home1/ncloud/www

# Change Apache Root Directory
sudo -s sed -i 's/var\/www\/html/home1\/ncloud\/www/g' /etc/httpd/conf/httpd.conf

# authority change 
sudo -s chmod -R 775 /home1
sudo -s chmod -R 775 /home1/ncloud
sudo -s chmod -R 775 /home1/ncloud/www
sudo -s chmod -R 775 /home1/ncloud/www/index.html

# Restart Apache
sudo -s systemctl restart httpd

 

감사합니다.

꾸벅 @.@



// 가상 터미널 체인지 총 6개 가능


Ctrl + Alt + F1 

Ctrl + Alt + F2 

Ctrl + Alt + ... 


// 열린 포트 확인


netstat -tnlp | grep -v 127.0.0.1 | sed 's/:::/0 /g' | sed 's/[:\/]/ /g' | awk '{print $5"\t"$10}' | sort -ug

setterm -blank 0



TextMode인 TUI 모드에서 한글이 출력이 잘되지 않는 현상이 발견되어서


확인해 본결과


Install 시에 TextMode는 한글을 지원해주지 않는다고 나타나며


확인은 Putty 를 통해서 하는것이 맞는것같... 습니다.



안되는거네요; ㅜ 2시간 날렸당



라이센스 발급을 위해서 호스트 네임을 변경하여야 하는 경우가 생겼습니다.


localhost 뭔가 좀  서버를 여러개 쓰기 위해서는 필요하다고 생각 되었으며 


hostnamectl set-hostname changehostname





hostnamectl set-hostname changehostname

간단 사용이네요 ㅎ

'GNU > LINUX' 카테고리의 다른 글

[Centos 7] TUI (TextMode) 에서 터미널 꺼짐 막기  (0) 2018.08.07
[CentOS7] TextMode 에서 한글 깨짐 현상  (0) 2018.08.06
Segmentation Fault  (0) 2016.07.15
COMMAND - alias, unalias  (0) 2016.06.24
COMMAND - SCP(Secure Copy)  (0) 2016.06.23

Shell 을 사용하다보면


흠 개발자들은 모르겠지만 /bin/sh 만 사용하는 나로써는


대부분 업무에 대한 잡다한 프로세스를 스크립트를 통해서 대체 하게 된다.


메모리가 튀는 순간을 확인하기 위해서 어느정도 때에 터지는지 실시간 확인을 한다거나 ( 물론 데몬으로 구현해도 상관은 없지만)  점점 하다보면 좀더 나은 방법을 찾겠지만 초창기에는 쉽고 간단한 방법으로 하게된다. 


for문을 쓰다가 요즘엔 foreach 를 자주 쓰는것처럼


int string 배열보단 vector<T>처럼 


아주 맨 처음에 정수 연산을 할때 아무생각 없이


cnt =0


while true

do 

.....

$cnt = $cnt + 1 

done

을 적지만 1에 대해 인식을 하지못하여서 제대로동작하지 않는 경우가 생긴다.




그렇기 때문에 간단하게 수정을 들어간다.



cnt =0

while true

do

cnt = $(($cnt+1))

echo $cnt

done





$(( $  value + 1)) 


다음엔 응용도 해보겠다.






자주자주 써봐야 하는데


Python 


C++ 


을 쓰다보니 헷갈리는 부분이 있다.


C++에서야


while(true)

{

sleep(1000);

std::cout<<"check"<<std::endl;

}



Python // 파이썬 의 경우는 인덴트가 중요하기 때문에 인덴트에 유의해서 작성한다.


while 1:

print("check")



우찌우찌 해야되지 하다가 검색도 안해보고 그냥 어림짐작으로 막 쓰다보니 되었던 while


#!/bin/sh


while true

do

ls -al

sleep 1

done



//  ; 가 너무 습관화 되어있다 보니 붙여야 하는지 마는지 너무 헷갈린다....


while: 도있고 while() 도있고 while 도있고


Unix에서는


while 조건문

do

할일

done


의 형식으로 적어 주면 된다.






   #include <stdio.h>


 #include <unistd.h>

 #include <sys/mouse.h>



 #include <sys/consio.h>


#include <string.h>


#include <stdlib.h>


 #include <fcntl.h>

 #include <sys/ioctl.h>


// 간략하게 마우스 우클릭만 겁나게 하는  프로그램

 

 

  int main(void)

  {

      int cfd = -1;

      int mouseproto = MOUSE_PROTO_SYSMOUSE;

 

      struct mouse_info mouse_info;

 

      if(-1==(cfd=open("/dev/consolectl",O_RDWR,0)))

      {

          printf("failed /dev/consolectl\n");

      }

 

      int mfd = -1;

 

      if(-1==(mfd=open("/dev/sysmouse",O_RDWR)))

      {

          printf("failed /dev/sysmouse\n");

      }

 

      mouse_info_t delta;

      memset(&delta,0,sizeof(mouse_info_t));

 

 

      for(;;){

 

 

      delta.operation=MOUSE_ACTION;

      delta.u.data.buttons |=( 1<< (3-1));

     ioctl(cfd,CONS_MOUSECTL,&delta);

      printf("Buttons: %08x\n",delta.u.data.buttons);

 

      delta.u.data.buttons =0;

      printf("Buttons: %08x\n",delta.u.data.buttons);

      ioctl(cfd,CONS_MOUSECTL,&delta);

      sleep(1);

  }

 

 

 

return 0;

}



별것도 아닌걸 가지고 핵고생한거같다... 


'GNU > FreeBSD' 카테고리의 다른 글

dlopen , dlsym, dlclose  (0) 2016.07.12
마우스 컨트롤(mousesystem.c)  (0) 2016.07.08
마웅스 컨트롤(ums)  (0) 2016.07.08
마우스 컨트롤(sysmouse)  (0) 2016.07.08
마우스 컨트롤(Command)  (0) 2016.07.08

세그멘테이션 결함(Segmentation Fault)


세그멘테이션 결함 은 소프트웨어의 실행 중에 나타날 수 있는 오류 이며 세그폴트(SegFault)로 줄여서 쓰기도 한다.



이 오류에 핵심은 프로그램이 


(1) 허용되지 않은 메모리 영역에 접근을 시도하거나


(2) 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생한다.


세그멘테이션은 OS에서 사용하는 메모리 관리 및 보호의 한 기법이다.


이것은 페이징으로 대부분 대체 되었지만 세그폴트의 용어는 여전히 사용된다. 


주로 사용 되는 메모리 관리 정책은 페이징 이지만 몇몇 OS에서는 여전히 일부 논리 레벨에서 세그멘테이션을 사용한다.


UNIX 계열 운영 체제들에서는 잘못된 메모리에 접근하는 프로세스는 SIGSEGV 신호를 받는다.


(signal 에 대해서는 각 운영체제 별로 따로 조사)


MS 윈도우에서는 STATUS_ACCESS_VIOLATION 예외 처리를 받는다.



ex) : 세그폴트의 예제 코드 (ANI C)

const char *s = "hello world";

*s  = 'H';



// 이 경우의 const char *s 는 읽기 전용으로 프로그램이 되지만  프로그램이 로드 되었을때 이 OS는 문자열과 상수 데이터를 메모리의 읽기 전용 세그먼트에 배치하며 프로그램 실행시 변수 s는 문자열의 위치를 가리키게 되고 'H'라는 문자열을 변수 s를 통해 메모리에 기록하려는 시도는 곧 세그멘테이션 결함을 일으킨다.








+ Recent posts