리눅스 부팅시 프로그램/명령어 실행하기 (Linux Init script)
서버가 완전히 부팅된 후에 무언가 자신만의 특별한 작업을 하고 싶을 때가 있다.
Windows 서버의 경우 [관리 도구]의 [작업 스케줄러]를 이용하면 된다. (자세한 설정 방법은 구글 검색을 이용해 보도록 하자.)
리눅스의 경우 다음과 같은 방법으로 설정 할 수 있다.
리눅스는 매우 다양한 설정지점(hooking point)이 있다.
부팅 시작시, 서비스 시작 (전, 중, 후), 네트워크 연결 (전, 후), 부팅 후 등이 대표적인 설정지점이다.
이 중에서 가장 많이 쓰이는 “서버가 완전히 부팅된 후” 특정 작업을 실행하는 것을 실습해 보도록 하겠다.
Run init-script when server fully startup.
예제는 root 계정에서 실행한다.
Ubuntu 14.04 LTS 기준으로 작성되었으며, CentOS나 Fedora 등에서는 명령어가 다를 수 있다. (대략적인 방법은 동일)
1. 예제 실행을 위해 몇가지 프로그램 확인
a) 시간 동기화 프로그램 확인
# ntpdate
만약 없다면 apt-get install ntpdate 로 설치하도록 하자.
# ntpdate pool.ntp.org
요즘에는 클라우드 서버를 강제로 호스트 서버와 시간 동기화가 되도록 설정하는 경우가 많다. 따라서 다음의 상황이 발생할 수도 있다.
< 이 서버는 항상 호스트 서버와 시간동기화가 이루어진다. 즉 시간설정은 호스트 서버의 몫이다 >
b) 현재 서울의 날씨 정보 가져오기
# curl
만약 없다면 apt-get install curl 로 설치하도록 하자.
# curl -s "http://api.openweathermap.org/data/2.5/weather?q=Seoul,kr&appid=44db6a862fba0b067b1930da0d769e98"
c) php 프로그램 확인
무작정 따라하지 말고, 당신의 서버에 php 가 설치되어 있다면 따라하자.
# php -v
# php -r 'echo "b\n";';
2. 부팅시 실행될 Shell Script 생성
#cd /root
#pwd
/root
#vi script-test1.sh
#!/bin/bash ntpdate pool.ntp.org curl -s "http://api.openweathermap.org/data/2.5/weather?q=Seoul,kr&appid=44db6a862fba0b067b1930da0d769e98" > weather.txt echo Server Boot - `date` >> boottime.txt
실행권한을 준다.
# chmod 700 script-test1.sh
실행해 본다.
# /root/script-test1.sh
3. crontab 에 등록
crontab 은 예약 실행 관리자로써 서버 부팅시 마지막에 실행된다.
엄밀히 말해서 부팅중에 실행되는 것이 아니라 부팅이 끝나고 실행되는 것이다.
#crontab -e
에디터 선택옵션이 뜰 수 있는데 라엘이에겐 vim.basic 이 편하더라. (3번)
에디터 선택옵션은
#select-editor
명령어로 언제든 변경할 수 있다.
@reboot 는 서버가 다시 켜졌을 때를 의미한다.
@reboot /root/script-test1.sh
4. 동작 테스트 (재부팅)
재부팅해서 스크립트의 동작여부를 확인한다.
# reboot
유용한 예제
쉘프로그램으로 PHP나 JAVA, Python 같은 외부 프로그램을 실행시켜 관련 스크립트를 작성할 수 있다.
이런 기법을 통해 curl 이나 mysql 연결, json 처리 등을 쉽게 할 수 있다.
# cd /root/
# vi script-test2.sh
#!/usr/bin/php <?php chdir('/root'); $weather = exec('curl -s "http://api.openweathermap.org/data/2.5/weather?q=Seoul,kr&appid=44db6a862fba0b067b1930da0d769e98"'); $weather_decoded = json_decode($weather, true); $boot_string = "Server boot at " . date('Y-m-d H:i:s') . ', Current weather is ' . $weather_decoded['weather'][0]['description'] . PHP_EOL; file_put_contents('boottime.txt', $boot_string, FILE_APPEND);
# chmod 700 script-test2.sh
crontab 에 해당 스크립트 등록
확인
라엘님 안녕하세요.
저는 아마존 라이트세일 우분투 18.04 LTS 사용자입니다.
리부팅 완료후…
sudo /sbin/ifconfig tap_sevpn 000.000.000.000 netmask 255.255.255.0
sudo iptables -t nat -A POSTROUTING -s 000.000.000.0/24 -j SNAT –to-source 000.000.8.36
sudo systemctl restart isc-dhcp-server
위와 비슷한 세가지 명령어를 순차적으로 실행하고 싶은데 어떻게 해야 할까요?
이것저것 시도해 보아도 번번히 실패해서 여쭤봅니다.
감사합니다.
안녕하세요.
/root 폴더에
myjob.sh 파일을 만들고 퍼미션을 700 으로 준다음
/root/myjob.sh 를 실행하게 설정해보세요.