php 설정상의 문제인줄 알고 한참을 헤맸으나

seLinux상의 문제임을 확인하였다.

아래 명령어를 통해 네트워크 엑세스를 허용해주면 된다

setsebool -P httpd_can_network_connect 1

https://studyforus.com/help/274040



crontab은 일정 시간동안 정해놓은 패턴을 반복하여 프로그램을 제어 할 수 있는 리눅스의 기능이다.

이를 활용하면, 일정시간마다 실행되어야하는 프로그램들을 간편하게 처리 및 관리해 줄 수 있다.

(마치 윈도우 기반 서버의 작업 스케줄러와 유사하다고 보면된다..)

프로젝트 중, 일정시간마다 php를 실행시켜줘야하는 기능을 구현해야 했는데

이를 통해 빠르게 해결 할 수 있었다.



1. 우선 php엔진이 어느 위치에 존재하는지 확인한다.

# whereis php 


2. crontab을 편집하기 위한 명령어 입력한다. (vi로 동작함)

# crontab -e 


3. 2.를 통해 오픈된 문서에 crontab 룰에 맞춰서 명령어를 작성해준다.

10 * * * * /usr/bin/php -q /.../process.php

맨 앞의 5개 파라미터(* * * * *)은 각각 분, 시, 일, 월, 요일(각 파라미터별 입력범위 : 00~59, 00~23, 00~31, 01~12, 0~7)을 의미한다.

즉 상기 명령어는 각 시간별 10분에 실행하라는 뜻이다.

하지만, 시간별 10분이 아닌 "10분 마다" 실행을 하려면

 */10 * * * *를 입력한다.

그 다음 파라메터는 php엔진의 위치, -q는 실행하겠다는 옵션을 의미한다.

그 다음에 입력된 경로는 실행할 php파일경로다.


4. 기타 명령어들

- crontab 재시작

# /etc/rc.d/init.d/crond restart


- 현재 crontab 리스트 보기

# crontab -l 


- 로그 조회

# tail /var/log/cron


- 작업 종료(사용 시, crontab 명령어들이 사라진다)

# crontab -r 



WAMP로 테스트가 마친 PHP프로젝트를

cent OS로 옮겼더니... 동작이 안되었습니다..


도대체 어디가 문제였을까.. 디버깅을 시도했습니다...

파일 접근(쓰기 / 읽기 등)에 있어서 문제가 발생했더라구요

대체 뭐가문제일까 찾아보았습니다..


파일 권한을 777로도 줘보고, 상위디렉터리까지 권한을 바꿔도 보고

파일을 새로 생성도 해보고,, 이상한 행동들은 다 했습니다..


검색을 열심히 해보니 전부 삽질이었습니다.

문제는 selinux가 실행된 상태였기 때문이었습니다.


selinux란?

-------------------------------------------------------------------------

보안 강화 리눅스(Security-Enhanced Linux, 간단히 SELinux)는 미국 국방부 스타일의 강제 접근 제어(MAC)를 포함한 접근 제어 보안 정책을 지원하는 매커니즘을 제공하는 리눅스 커널 보안 모듈이다. 다양한 리눅스 배포판에 추가할 수 있는 커널 수정 및 사용자 공간 도구들의 모임이다. 보안 강화 리눅스는 보안 결정 진행을 보안 정책과는 별개로 함과 동시에 보안 정책의 영향을 받는 소프트웨어의 양을 간소화하는 것을 시도하는 구조를 이룬다.[1][2] 보안 강화 리눅스의 기반이 되는 주요 개념들은 미국 국가안보국의 일부 초기 프로젝트들로 거슬러 올라간다.

이 보안 모듈은 2003년 8월 8일 버전 2.6을 기점으로 주류 리눅스 커널에 통합되어 있다.

----------------------------------------------------------------------

라고 위키에서 말하는군요

위키출처 : https://ko.wikipedia.org/wiki/%EB%B3%B4%EC%95%88_%EA%B0%95%ED%99%94_%EB%A6%AC%EB%88%85%EC%8A%A4


[해결방법]

지금 실행된 selinux 종료 (재부팅 설정에 따라 부팅하면 다시 켜질수있음)

# setenforce 0


부팅 시 실행하지 않기 설정

# vi /etc/selinux/config

SELINUX=disabled

(부팅때마다 실행할 경우 SELINUX=enforcing)


관련된 이슈나 정보가 있으면 댓글로 알려주세요~


기본적인 웹서버는 Apache, PHP, MySQL로 구성이 되어있다. 이를 줄여서 APM서버라고도 부른다.

리눅스 환경에서 APM을 설치하기 위한 절차는 다음과 같다.


1. 우선 아파치를 설치한다.

$ sudo apt-get install apache2


2. 이후 MySQL 클라이언트와 서버를 설치한다.

$ sudo apt-get install mysql-server mysql-client

아래 이미지와 같이 root에 대한 정보를 입력하라고 뜨면 절차대로 입력한다.


3. MySQL이 모두 설치 되었으면 PHP를 설치하는 단계로 넘어간다
$ sudo apt-get install php5 php5-common

4. Apache와 PHP를 연동해주는 작업을 한다.

$ sudo apt-get install libapache2-mod-php5


5. MySQL와 PHP를 연동해주는 작업을 한다.
$ sudo apt-get install php5-mysql

6. 모든 설치작업을 완료하였다. 정상적인 시스템 인프라가 동작하도록 apache와 mysql을 재시작해주는 작업을 해준다.
$ sudo /etc/init.d/apache2 restart
$ sudo /etc/init.d/mysql restart

7. apache서버와 mysql서버가 정상적으로 동작하는지 확인해 본다. 상태가 LISTEN로 양호하게 동작한다면 웹서버의 구축이 성공적으로 완료된것이다.
$ sudo netstat -atp | grep apache2 
$ sudo netstat -atp | grep mysqld

8. php와 apache의 연동을 확인한다. 웹호스트의 루트 디렉터리 경로는 일반적으로 /var/www에 위치해 있다. 해당 경로에 phpinfo.php를 만들고, 아래와 같은 내용을 적은 후, 저장해준다. 해당 PHP메소드는 설치된 PHP에 대한 정보를 테이블형태로 출력해주는 메소드이다. 해당 경로로 정상적으로 접속된다면, 설치를 성공적으로 완료했음을 알 수 있다.
$ sudo gedit /var/www/phpinfo.php

<?php
	phpinfo(); 
?>



딱 두가지만 알면 된다.

//DB 연결

$connect = mysql_connect('localhost','DB계정명','DB암호');

$db = mysql_select_db('DB명',$connect);


위 예제를 통해 $db는 지정된 옵션의 데이터베이스로 연결된 객체가 된다.

이제 다음과 같은 소스로 마음껏 데이터베이스의 정보를 가져오거나 쓸 수 있게된다.


//쿼리문 전송 및 가져오기

$sql = "select *from board where name='admin'";

$result = mysql_query($sql,$connect);


//출력

$fileds = mysql_num_fields($result);

while($row = mysql_fetch_row($result)){

echo $row[0].$row[1].$row[2];

}

$sql 변수는 쿼리를 담는 전용 변수로 지정해 두었다.

INSERT라면 굳이 //출력 이하의 부분을 수행 할 필요는 없다.

하지만 데이터베이스로부터 정보를 가져와서 레코드단위로 읽어내리는 작업은 //출력 이하의 내용을

활용하면 아주 쉽게 가져올 수 있다. while문 한번 당 레코드 한줄을 읽어내려가는 것이며, 배열 $row에는 칼럼 순서대로

데이터가 저장된다.


따로 어디에 저장해두면 항상 유용하게 사용 할 수 있다.

+ Recent posts