2016.03.28 14:22

리눅스 경과시간 출력

※ centOS에서 bc를 사용하기 위해서는 설치를 해야한다. (yum install bc)


bash 스크립트로 작업을 처리하고선 그 경과 시간을 측정하고자 하려고 한다.

스크립트 특성상 다양한 방법이 있겠지만, date, bc, awk 를 이용해서 만들어 봤다.

#!/bin/bash
beginTime=$(date +%s%N)

# 여기에 작업 내용을 구현한다
sleep 1

endTime=$(date +%s%N)
elapsed=`echo "($endTime - $beginTime) / 1000000" | bc`
elapsedSec=`echo "scale=6;$elapsed / 1000" | bc | awk '{printf "%.6f", $1}'` 
echo TOTAL: $elapsedSec sec


date 를 이용해서 nanosecond 시간을 얻어서 그 차이를 구한다.

그리고 bc 를 이용해서 부동소수의 초단위의 시간을 계산하고, 그 결과를 awk 에 넘겨서 출력 포맷팅을 만들었다.


위의 실행 결과는 다음과 같다.

TOTAL: 1.003000 sec


[출처] [bash] 경과시간 출력하기

Trackback 0 Comment 2
2016.03.28 13:39

How to Execute PostgreSQL Commands Inside Unix Shell Scripts

Question: How do I executed PostgreSQL Commands inside a Linux / UNIX shell script?

Answer: With the help of the psql interactive terminal, you can execute the psql commands from the shell script. For this purpose, you should enable the password less login by pg_hba.conf, or .pgpass.


Syntax

psql DBNAME USERNAME << EOF
     statement 1;
     statement 2;
     .
     .
     statement n;
EOF


PostgreSQL: Execute SQL from shell scripts

EOF 블록 사이에 postgreSQL 모든 명령어 입력

dbname="test"
username="test"
psql $dbname $username << EOF
SELECT * FROM test;
EOF


PostgreSQL: Using variables in SQL from shell scripts

EOF 블록 내부에 쉘 스트립트 변수를 사용할 수 있음

dbname="test"
username="test"
wherecond="tgs"
psql $dbname $username << EOF
SELECT * FROM test WHERE col_name = '$wherecond';
EOF


이를 이용해서 스키마(schema)를 삭제하고 복구(restore)하는 실행파일 작성

dbname="test"

schemaname="test"

psql $dbname << EOF

DROP SCHEMA IF EXISTS $schemaname CASCADE;

\q

EOF

pg_restore --username "username" --dbname "test" --no-password --no-owner --verbose 백업파일(절대경로)


[출처] How to Execute PostgreSQL Commands Inside Unix Shell Scripts

Trackback 0 Comment 0
2016.02.29 10:33

pgAdmin 컬럼 내용 전체 보기

File -> Options -> Query tool -> Max. characters per column 을 -1로 변경


[출처] Select whole column content in pgAdmin

Trackback 0 Comment 0
2016.02.17 15:42

html form을 json으로 변환

serializeObject function 추가
$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};


호출

$.ajax({
	url : 'url',
	contentType: 'application/json',
	data : JSON.stringify($("form").serializeObject()),
	type : 'POST',
	dataType : 'json',
	success : function(result) {
		.....
	}
});


[참고] Send JSON Data on HTML form submit

Trackback 0 Comment 1
2016.01.26 18:08

AWS EC2 인스턴스간 파일 복사

리눅스의 scp 명령어를 이용하면 사용 가능

하지만 비밀번호라던지 시스템이 주기적으로 작업을 하기 위해서는 추가 설정이 필요

아래의 작업은 CentOS7를 기반으로 작성


1. 소스 EC2 (서버1이라고 지칭)에서 수행

1.1 scp, ssh, sftp, rsync를 수행하는데 필요한 keypair 생성

1.2 쉘로 로그인 해서 아래의 명령어 수행 (생성시 passphrase에 비밀번호 입력금지)

ssh-keygen -t rsa

1.3 생성된 파일은 보통 /root/.ssh/id_rsa 또는 /home/ec2-user/.ssh/id_rsa 에 위치


2. 타켓 EC2(서버2라고 지칭)에서 수행

2.1 "sshd_config" 파일 확인 (/etc/ssh/sshd_config에 위치)

2.2 sshd_config파일에서 아래 2줄 주석 제거 (EC2 사용자로 로그인했을 시 sudo su 사용)

RSAAuthentication yes

PubkeyAuthentication yes

2.3 서버2에서 authrorized_keys 파일 찾기

/home/ec2-user/.ssh/authorized_keys 또는 /root/.ssh/authorized_keys 에 위치

2.4 서버1의 id_rsa.pub 파일의 내용을 서버2의 authorized_keys에 붙이기 (줄 마지막에 엔터키를 치고 붙이면 됨)

서버1의 id_rsa.pub 파일은 /home/ec2-user/.ssh/id_rsa.pub 또는 /root/.ssh/id_rsa.pub 에 위치


3. 파일이 정상 복사 되는지 확인

scp "대상파일" "아이디"@"서버2 IP":/"복사 위치"

예) scp test1.txt ec2-user@ip-10-252-1-56.us-west-2.compute.internal:/home/ec2-user/

ec2-user@ip-10-252-1-56.us-west-2.compute.internal은 서버2의 private DNS이기 때문에 AWS Console에서 확인할 수 있음

접속 시 "Are you sure you want to continue connecting"을 물어보는데 여기서 yes를 하면 /root/.ssh/known_hosts에 기록이 됨


4. 이슈

보안: IP만 알면 무작위로 복사할 수 있지 않을까? (더 확인해봐야 하겠지만 rsa key를 서버2에 추가하기 때문에 제한적으로 접근을 막을 수 있는 것으로 보여짐 또는 restrict ssh/scp access to specific ip addresses 에서 언급한 것처럼 /etc/hosts.allow에 특정 IP만 허용해 줄 수 있을 것 같음) - sshd: IPADDRESS, IPADRRESS


5. 추가정보

리전(region)이 다른 경우 private DNS를 사용할 수 없음

대신 public DNS를 사용하면 됨


[참고] How to do SCP from one EC2 Instance to another EC2 Instance

Trackback 0 Comment 0