2015년 9월 8일 화요일

[PHP] 프로그램 중복 실행 방지

crontab 에 스케줄을 등록해 놓고, 반복해서 프로그램을 실행하다 보면
중복 실행이 되지 않게 해 줘야 하는데, 
간단하게 프로그램에서 하는 방법을 설명한다.

예)
 $nExecuteNumber = 9;

 // convert mov => mp4
 $mExistFile = '/home/account/footage_convert_mp4_' . $nExecuteNumber . '.chk';
 if(file_exists( $mExistFile )) {
  exit;
 }

중략
...
        # insert last line, delete file extend "chk".
 shell_exec( sprintf("rm -rf %s", $mExistFile) );


에러가 발생해 중간에서 실행이 멈추는 경우가 발생하면 사용하지 않아야 한다.

이런 경우는 아래

쉘 스크립트를 이용하여 중복 실행을 방지하는 방법은 쉘 스크립트를 이용하여 중복방지를 참조하기 바란다.

앤트맨이란 영화를 보고 나서.

앤트맨이라 영화를 한다기에 별 기대를 하지 않고 봤는데,
(이전에 봤던 앤트맨 이란 영화와 내용을 별 다르지 않을 것으로 봤다.)

이전에 봤던 영화와는 다르게 유머코드도 재법 있고, 어벤져스와 역이는 내용도 다소 흥미있는 내용이였다.
유머를 담당하고 있는 마이클 페나(Michael Pena) 이란 배우가 이전과는 다른 재미있는 케릭터로 나온 것도 재미 있었다.

마벨 유니버스 라인...

다음 개봉하는 시빌 워도 기대가 된다.

걍 추억하기 위해 사진 한 컷. 마이클 더글라스(Michael Douglas) 와 폴 러드(Paul Rudd) 사진 한장.

[shell script]서버간 파일 복사를 위한 scp 사용법

linux 상에서 파일을 복사하는 방법 cp 를 주로 사용하는데,
서버 간에 파일을 복사하려면 scp 라는 명령어를 사용하여 복사를 한다.
예)
root>scp ./*.php 192.168.0.1:/home/account/php/lib/

설명)
"scp"란 명령어를 사용하여 현재 디렉토리에 있는 "php"란 확장자를 가진 파일을 192.168.0.1 이란 서버의 해당 디렉토리에 옮기는 예제이다.
명령어를 실행하면 파일을 복사할 서버의 권한이 있는지 체크하기 위해 "root"의 패스워드를 물어본다.

2015년 9월 6일 일요일

[memcache] 서버구성 (memcached)

memcached 서버구성
http://memcached.org/
 
필요 패키지 설치
[root@localhost ~]# yum install libevent-devel
[root@localhost ~]# tar -zxvf memcached-1.x.x.tar.gz
[root@localhost ~]# cd memcached-1.x.x
[root@localhost ~]# ./configure --with-libevent=/usr/lib64/
[root@localhost ~]# make && make test && make install

[root@localhost ~]# vi /etc/memcached.conf
--------------------------------------------
# run as a daemon
-d
# user to run daemon nobody/apache/www-data
-u nobody
#Memory a usar
-m 512
# default port
-p 11211
#max simultaneous connections
-c 9216
# only listen locally
#-l 127.0.0.1
--------------------------------------------

실행스크립트 및 데몬스크립트
[root@localhost ~]# touch /etc/init.d/memcached
[root@localhost ~]# chmod +x /etc/init.d/memcached
------------------------------------------------------------------------
#!/bin/bash
#
# memcached    This shell script takes care of starting and stopping
#              standalone memcached.
#
# chkconfig: - 80 12
# description: memcached is a high-performance, distributed memory
#              object caching system, generic in nature, but
#              intended for use in speeding up dynamic web
#              applications by alleviating database load.
# processname: memcached
# config: /etc/memcached.conf
# Source function library.
. /etc/rc.d/init.d/functions
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/memcached
DAEMONBOOTSTRAP=/usr/local/bin/start-memcached
DAEMONCONF=/etc/memcached.conf
NAME=memcached
DESC=memcached
PIDFILE=/var/run/$NAME.pid
[ -x $DAEMON ] || exit 0
[ -x $DAEMONBOOTSTRAP ] || exit 0
RETVAL=0
start() {
        echo -n $"Starting $DESC: "
        daemon $DAEMONBOOTSTRAP $DAEMONCONF
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch $PIDFILE
        echo
        return $RETVAL
        }
stop() {
        echo -n $"Shutting down $DESC: "
        killproc $NAME
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f $PIDFILE
        return $RETVAL
        }
# See how we were called.
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        restart|reload)
                stop
                start
                RETVAL=$?
                ;;
        status)
                status $prog
                RETVAL=$?
                ;;
        *)
                echo $"Usage: $0 {start|stop|restart|status}"
                exit 1
esac
exit $RETVAL
------------------------------------------------------------------------
 
[root@localhost ~]# touch /usr/local/bin/start-memcached
[root@localhost ~]# chmod +x  /usr/local/bin/start-memcached
------------------------------------------------------------------------------ 
#!/usr/bin/perl -w
# start-memcached
# 2003/2004 - Jay Bonci 
# This script handles the parsing of the /etc/memcached.conf file
# and was originally created for the Debian distribution.
# Anyone may use this little script under the same terms as
# memcached itself.
use strict;
if ($> != 0 and $< != 0) {
 print STDERR "Only root wants to run start-memcached.\n";
 exit;
}
my $etcfile = shift || "/etc/memcached.conf";
my $params = [];
my $etchandle; 
# This script assumes that memcached is located at /usr/bin/memcached, and
# that the pidfile is writable at /var/run/memcached.pid
my $memcached = "/usr/local/bin/memcached";
my $pidfile = "/var/run/memcached.pid";
# If we don't get a valid logfile parameter in the /etc/memcached.conf file,
# we'll just throw away all of our in-daemon output. We need to re-tie it so
# that non-bash shells will not hang on logout. Thanks to Michael Renner for 
# the tip
my $fd_reopened = "/dev/null";
sub handle_logfile {
 my ($logfile) = @_;
 $fd_reopened = $logfile;
}
sub reopen_logfile {
 my ($logfile) = @_;
 open *STDERR, ">>$logfile";
 open *STDOUT, ">>$logfile";
 open *STDIN, ">>/dev/null";
 $fd_reopened = $logfile;
}
# This is set up in place here to support other non -[a-z] directives
my $conf_directives = {
 "logfile" => \&handle_logfile
};
if (open $etchandle, $etcfile) {
 foreach my $line (<$etchandle>) {
  $line =~ s/\#.*//go;
  $line = join ' ', split ' ', $line;
  next unless $line;
  next if $line =~ /^\-[dh]/o;
  if ($line =~ /^[^\-]/o) {
   my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/; 
   $conf_directives->{$directive}->($arg);
   next;
  }
  push @$params, $line;
 }
}
unshift @$params, "-u root" unless (grep $_ eq '-u', @$params);
$params = join " ", @$params;
if (-e $pidfile) {
 open PIDHANDLE, "$pidfile";
 my $localpid = ;
 close PIDHANDLE;
 chomp $localpid;
 if (-d "/proc/$localpid") {
  print STDERR "memcached is already running.\n"; 
  exit;
 } else {
  `rm -f $localpid`;
 }
}
my $pid = fork();
if ($pid == 0) {
 reopen_logfile($fd_reopened);
 exec "$memcached $params";
 exit(0);
} elsif (open PIDHANDLE,">$pidfile") {
 print PIDHANDLE $pid;
 close PIDHANDLE;
} else {
 print STDERR "Can't write pidfile to $pidfile.\n";
}
------------------------------------------------------------------------------
# /etc/init.d/memcached restart
Shutting down memcached:                                   [  OK  ]
Starting memcached:                                        [  OK  ]
데몬 확인

[root@localhost ~]# ps ax | grep memcach
14688 pts/0    Sl     0:00 /usr/local/bin/memcached -u root -u nobody -m 512 -p 11211 -c 9216
 
 
client (web서버)
memcache 모듈 설치
# wget http://pecl.php.net/get/memcache-2.2.4.tgz
# tar xzfv memcache-2.2.4.tgz
# cd memcache-2.2.4
# phpize
# ./configure --enable-memcache
# make 
# make install
# vi /usr/local/apache/conf/php.ini
extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613/"
extension=memcache.so
[Session]
; Handler used to store/retrieve data.
;session.save_handler = files
session.save_handler = memcache
session.save_path = "tcp://192.168.0.101:11211"   <--- memcached 서버 IP
 
저장 후 apache restart