데이터 마이그레이션 할 때 rsync 명령어를 주로 사용하는데, 이때 rsync란 어떤 개념인 지 자세히 알아보자.

 

- rsync란?

  • rsync는 Remote Synchronization의 줄임말로 파일과 디렉토리를 동기화하기 위한 프로토콜이자 리눅스의 유틸리티 명령어다.
  • rsync 명령어를 이용해 로컬에 있는 파일이나 디렉토리를 원격 호스트로 보내거나 원격에 있는 파일, 디렉토리를 로컬로 복사해 올 수 있다.

- 장점

  • 원격 시스템으로부터 파일을 효율적으로 복사 및 동기화할 수 있다.
  • link, device, 파일의 소유자와 그룹권한 등 파일의 부가정보까지 복사가 가능하다.
  • 빠르다.
  • rsync는 remote-update 프로토콜을 이용해서 차이가 있는 파일만 복사한다.
  • 처음에는 모든파일 및 디렉토리를 복사 후, 이후부터는 출발지와 목적지 간의 다른부분 만을 복사하기 때문에 빠르고 효율적으로 작동한다.
  • 데이터를 압축해서 송수신하기 때문에 적은 대역폭을 사용한다.
  • 파일크기 또는 시간의 변화 등을 이용하여 동기화한다.

 

- 설치

  • 대부분의 리눅스 배포판이나 OSX에는 기본 설치가 되어 있다.
  • 하지만 일부 리눅스를 최소 설치 옵션으로 설치했다면 rsync가 포함되지 않았을 수 있다. 이 경우 아래처럼 yum이나 apt 등으로 설치해주면 된다.
$ sudo yum install rsync 
또는
$ sudo apt-get install rsync


- 사용법

$ rsync [OPTIONS] [SOURCE] [TARGET]

- 예시

# 로컬 데이터를 로컬에 복사
$ rsync -avh /home/user/data /home/new_user/backup

# 로컬의 데이터를 리모트로 복사 
$ rsync -avh /home/user/data remote_user@remotehost:/home/remote_user/backup

# ssh 포트가 다른 경우
$ rsync -avh -e "ssh -p 123" /home/user/data remote_user@remotehost:/home/remote_user/backup

# 리모트 데이터를 로컬로 가져옴
$ rsync -avh remote_user@remotehost:/home/remote_user/backup /home/user/data
  • SOURCE와 TARGET 순으로 파일의 경로를 입력하면 된다.
  • 만약 SOURCE 혹은 TARGET이 리모트에 있는 파일 경로라면, "[USER]@[HOST]:[PATH]" 형식으로 입력해주면된다.
    이때, 콜론(:)은 빼먹지 않도록 유의해야한다.

 

- 옵션값

man 페이지에서 조회한 rsync 옵션값은 아주 많은데, 그중에서도 자주 사용하는 옵션값은 아래와 같다.

 

옵션 이름설명
-v진행 상황을 상세하게 보여줌
-r지정한 디렉토리의 하위 디렉토리까지 재귀적으로 실행
-l소프트 링크 보존
-H하드 링크 보존
-p버전 속성 보존
-o소유 속성 보존(루트)
-g그룹 속성 보존
-t 타임스탬프 보존
-D디바이스 파일 보존(루트)
-z데이터 압축 전송
-b낡은 파일은 ~가 붙음
-u추가된 파일만 전송, 새 파일은 갱신하지 않음
--existing추가된 파일은 전송하지 않고 갱신된 파일만 전송
--delete서버에 없는 파일은 클라이언트에서도 삭제
-a아카이브 모드. rlptgoD를 자동 지정
-c서버와 클라이언트의 파일 크기를 세밀히 체크
--stats결과를 보고
-e ssh(rsh) 전송 암호화

 
 
 
 
 


Reference
https://hbase.tistory.com/318

https://cheershennah.tistory.com/m/131

 

'Programming > Linux' 카테고리의 다른 글

[Linux] /tmp와 /var/tmp의 차이  (2) 2023.03.11
[Linux] Nohup이란?  (0) 2023.03.10
[Linux] Crontab 이란?  (0) 2022.06.30
[Linux] at이란?  (0) 2022.06.30

- /tmp란?

  • 재부팅하면 안에 있는 파일들이 삭제 된다. 재부팅을 하지 않아도 정기적으로 10일마다 삭제

- /var/tmp란?

  • 재부팅을 해도 파일들이 삭제되지 않는다. 정기적으로 30일마다 삭제

 

[root@localhost ~]# cat /usr/lib/tmpfiles.d/tmp.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
 
# See tmpfiles.d(5) for details
 
# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d
 
# Exclude namespace mountpoints created with PrivateTmp=yes
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp
  • CentOS6까지는 /etc/cron.daily/tmpwatch 라는 스크립트가 위 디렉터리에 있는 파일들을 삭제하는데, CentOS7부터는 tmpwatch를 대신해 systemd-tmpfiles가 동작한다.
  • systemd-tmpfiles의 설정 파일은 /usr/lib/tmpfiles.d/tmp.conf에 위치한다. 
  • 참고로 systemd-tmpfiles-clean.service 서비스에 의해서 파일이 삭제된다.

 

* 더 자세히 알고 싶으면 메뉴얼 페이지를 보자

[root@abc/tmp]#  man tmpwatch   

[root@abc/tmp]# vi /etc/cron.daily/tmpwatch

#! /bin/sh
flags=-umc

/usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \
-x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \
-X '/tmp/hsperfdata_*' -X '/tmp/.hdb*lock' -X '/tmp/.sapstartsrv*.log' \
-X '/tmp/pymp-*' 10d /tmp
/usr/sbin/tmpwatch "$flags" 30d /var/tmp
for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do
    if [ -d "$d" ]; then
/usr/sbin/tmpwatch "$flags" -f 30d "$d"
    fi
done
  • 위와 같이 매일 한 번씩, atime/mtime/ctime 기준으로 10일 이상된 파일을 삭제하는 것으로 보이며, /var/tmp 의 경우는 보관기간이 30일로 더 긴 것으로 나온다.

 

 

 

 

 

 


Reference
https://sysops.tistory.com/208

https://infrajp.tistory.com/18

'Programming > Linux' 카테고리의 다른 글

[Linux] rsync란?  (0) 2023.04.28
[Linux] Nohup이란?  (0) 2023.03.10
[Linux] Crontab 이란?  (0) 2022.06.30
[Linux] at이란?  (0) 2022.06.30

- Nohub이란?

  • nohup은 no hang up의 약자로 백그라운드로 지속적으로 실행하는 프로세스를 의미한다.
  • nohup은 실행을 현재 사용자 세션이 아닌 운영체제가 제공하는 백그라운드 공간에서 실행을 한다.
  • 리눅스는 기본적으로 exit로 세션을 종료할 경우 터미널과 연결이 끊어졌다는 HUP(Hang Up,끊다) 시그널이 발생하고,  자식 프로세스들은 STOP 시그널을 받게 된다.
  • 이 때, nohup 명령은 “세션이 종료되더라도 계속 실행하게 하고 싶은 프로세스에는 HUP 시그널을 전달하지 않도록(No Hang Up,끊지마) 한다"는 의미이다.

 

- 사용법

- 기본 실행

% nohup [실행파일명]

- 예시

chmod 755 test.sh
  • test라는 이름을 가진 스크립트 파일을 nohup 명령으로 실행시켜보자.
  • nohup 으로 실행시킬 파일은 반드시 755 퍼미션을 가지고 있어야 한다.
% nohup ./test.sh
appending output to nohup.out
  • nohup 명령으로 스크립트를 실행해 보면, 위와 같은 메세지 표시가 된다.
  • 이렇게 실행 시키면, 프로세스는 대기 상태가 되고 Ctrl+C를 누르면 종료 된다.
    그리고, 해당 스크립트 프로그램의 표준 출력이 nohup을 실행 시킨 경로에 nohup.out 파일에 출력된다.

- nohup 명령의 표준 출력을 다른 파일에 쓰기

nohup ./test.sh > nohup_test.out
  • 표준 출력을 다른 파일에 쓰기 위에서는 리다이렉션(>, >>)을 사용하면 된다.
nohup ./test.sh > /dev/null
  • 아예 표준 출력을 쓰고 싶지 않다면 위와 같이 하면 된다.

 

- 백그라운드 실행

  • &를 사용하면 프로그램이 백그라운드로 실행된다.
% ./test.sh &
  • 여기서 Ctrl+C를 누르지 않아도 대기 상태가 되지 않는다.
% ps -ef | grep test.sh
  • 위 명령으로 백그라운드로 실행되고 있는 것을 확인 할 수 있다.

* nohup과 &의 차이는?

  • nohup는 프로그램을 데몬으로 형태로 실행시키는 것이기에 앞에서 설명했듯이 로그아웃 등과 같이 세션 연결이 끊기더라도 프로세스가 계속 동작된다. 그러나, 실행 시키면 대기 상태가 발생하고 Ctrl+C를 누르면 프로세스는 바로 종료된다.
  • 그에 비해, 백그라운드(&) 실행은 실행 시키면 대기 상태가 없지만, 세션 연결이 끊기면 실행한 프로그램도 함께 종료된다.
% nohup nohup ./test.sh > /dev/null &

위와 같이 nohup 명령을 백그라운드(&)로 같이 실행시키게 되면, 대기 상태도 없고 세션 연결이 끊기더라도 프로세스의 종료 없이 백그라운드로 실행되게 된다.

 

명령 Ctrl+C 터미널 종료
[command] 명령이 중단됨 명령이 중단됨
[command] & 명령이 중단되지 않음 명령이 중단됨
nohup [command] 명령이 중단됨 명령이 중단되지 않음
nohup [command] & 명령이 중단되지 않음 명령이 중단되지 않음

 

 

- 프로세스 종료

% ps -ef | grep test.sh
  501 61324 21348   0  7:34AM ttys001    0:00.01 /bin/bash ./test.sh
  501 61329 21348   0  7:34AM ttys001    0:00.00 grep test.sh

 

% kill 61324
  • 프로세스 종료는 먼저 다음 명령으로 프로세스 아이디를 조회 후, 종료시킬 프로세스 아이디를 kill 명령으로 종료시키면 된다. 

 

최신 리눅스는 nohup을 복제하는 systemd-run 사용을 권장하고 있다고 한다.

 

 

 

 

 

 

 


Reference

https://www.devkuma.com/docs/linux/nohup/

'Programming > Linux' 카테고리의 다른 글

[Linux] rsync란?  (0) 2023.04.28
[Linux] /tmp와 /var/tmp의 차이  (2) 2023.03.11
[Linux] Crontab 이란?  (0) 2022.06.30
[Linux] at이란?  (0) 2022.06.30

- 리눅스 프로세스 스케쥴링

  • 리눅스에서는 특정한 시간에 어떤 작업을 수행하기 위해 스케줄링이라는 기능을 사용한다.
  • 스케줄링에는 at 과 cron 두 가지가 있으며 모두 데몬이 실행중이어야 한다.
  • at 스케줄링은 주로 프로그램을 특정시간에 한 번만 사용하고 싶을 때 이용한다.
  • cron 스케줄링은 프로그램을 특정 날짜나 시간, 요일에 맞춰 주기적으로 사용하고 싶을 때 이용한다.

([Linux] at이란? https://dev-record-levelup.tistory.com/2)

 

- Cron이란?

  • 특정한 시간에 또는 특정 시간 마다 어떤 작업을 자동으로 수행하게 해주고 싶을 때 사용하는 명령어.
  • cron은 특정한 시간에 특정한 작업을 수행하게 해주는 스케줄링 역할을 한다.
  • cron이 언제 무엇을 하는지 특정 파일에 저장하는 것을 크론탭(Crontab)이라고 한다.

예를 들어, 새벽 4시에 데이타베이스 백업 받아 줘라든지, 아침 7시에 서버의 사용량을 리포트하도록 한다든지 등등 적절하게 사용하면 아주 편리하게 성과를 낼 수 있는 방법이다.

 

- Crontab은 언제 사용하는지?

  1. 특정 시간에 특정 작업을 해야 할 때
  2. 반복된 시간에 반복된 작업을 해야 할 때
  3. 예약 작업을 사용해야 할 때

 

- Crontab 설정

  • etc 하위에 위치한 crontab파일을 열어 crontab 설정 방법을 확인한다.

필드  설명 입력 가능 예시
m minute, 분 정보를 입력한다. 0~59 사이의 숫자
h hour, 몇시에 수행될지를 정하는 시 정보 0~23 사이의 숫자
dom day of month (= day), 일자 정보 1~31 (1~해당 월의 최대일자까지)
mom month, 월 정보 1~12
dow day of week, 요일정보 0~7 (0 일요일, 1 월요일, 2 화요일
순으로 증가. 7은 다시 일요일)
user user, 사용자 정보  
command command, 수행되어야 할 명령어  

 

- Crontab 명령어

일부러 잘못된 옵션을 주고 명렁어를 수행하면 아래와 같이 도움말을 볼 수 있다.

# 현재 크론탭에 설정되어 있는 내용 확인
crontab -l
# 크론탭 내용 입력/수정 (vi 에디터 활용, 설정 입력 후 :wq 로 저장)
crontab -e
# 현재 크론탭에 설정되어 있는 내용 삭제
crontab -r
# 특정 user의 crontab을 설정할 때 
# 다른 명령어를 쓸 때 같이 쓰면 특정 사용자의 crontab 조회 및 수정 가능
crontab -u
# crontab 내용 삭제 전 확인 문구 띄우기
# confirm창 같은 느낌으로, 삭제여부 재확인
crontab -i

  • 삭제 전 확인 문구 띄우기, crontab -i -r 또는 crontab -ir 모두 동일하게 동작함.

 

  • 아래 명령어를 통해 실행 중인 cron 프로세서를 확인할 수 있다.
ps -ef|grep crond

 

- 예제

  • crontab -e 명령어를 사용하면 vi 모드로 전환이 되면서 crontab을 등록할 수 있다.

 

매분 실행

# 매분 test.sh 실행
* * * * * /home/script/test.sh

* (asterisk) : 해당 기호가 입력되면 해당 필드의 모든 값에서 cron이 수행된다.

 

특정 시간 실행

# 매주 금요일 오전 5시 45분에 test.sh 를 실행
45 5 * * 5 /home/script/test.sh

 

반복 실행

# 매일 매시간 0분, 20분, 40분에 test.sh 를 실행
0,20,40 * * * * /home/script/test.sh

, (comma)  : 특정 값을 여러 개 지정할 수 있다. 구간이나 주기로 지정이 안되는 불특정한 값일 때 사용

 

범위 실행

# 매일 1시 0분부터 30분까지 매분 tesh.sh 를 실행
0-30 1 * * * /home/script/test.sh

- (dash)  : 숫자 구간을 지정할 수 있다.

 

간격 실행

# 매 10분마다 test.sh 를 실행
*/10 * * * * /home/script/test.sh

/ (slash)  : 값을 특정 주기로 나눌 때 사용

 

조금 복잡하게 실행

# 5일에서 6일까지 2시,3시,4시에 매 10분마다 test.sh 를 실행
*/10 2,3,4 5-6 * * /home/script/test.sh

→ crontab을 설정하고 wq로 저장한다.

 

- Crontab 설정 변경내용 적용

  • crontab -e로 새롭게 저장한 뒤에는 crontab 변경 내용에 대해서 명령어로 재시작 또는 시작해줘야 한다.
  • 시작, 재시작, 중단 명령어는 ubuntu와 linux가 다르다.
OS ubuntu linux
시작 service cron start service crond start
재시작 service cron restart service crond restart
중단 service cron stop service crond stop
상태 확인 service cron status service crond status

 

- Crontab 권한

- Crontab 권한 부여

cron.allow

  • cron 허용 계정목록
  • (기본값) 파일 없음 → 모두 허용
[root@zetawiki ~]# ll /etc/cron.allow
ls: cannot access /etc/cron.allow: No such file or directory

cron.deny

  • cron 금지 계정목록
  • (기본값) 내용 비어 있음 → 모두 허용
[root@zetawiki ~]# ll /etc/cron.deny
-rw-r--r--. 1 root root 0 Jul 19  2011 /etc/cron.deny
[root@zetawiki ~]# cat /etc/cron.deny
[root@zetawiki ~]#

 

  • cron.allow와 cron.deny 파일이 둘 다 존재하지 않는 경우, 루트 사용자 권한이 있는 사람만 crontab명령으로 작업할 수 있다.
  • cron.allow 및 cron.deny 파일을 편집하거나 만들려면 수퍼유저(root) 권한이 필요하다.
  crontab 생성, 편집, 표시, 제거 가능 crontab 생성, 편집, 표시, 제거 불가능
cron.allow (O) cron.allow에 나열된 사용자만 나머지
cron.allw (X)                         
cron.deny (O)
cron.deny에 나열된 사용자를 제외한 모든 사용자 cron.deny에 나열된 사용자
cron.allow (X)                 
cron.deny (X)
슈퍼유저 권한 필요(ex. root) 슈퍼유저 제외 나머지 모두
  • root계정으로 cron.allow 수정하여 해당 계정 추가(한 라인에 사용자 이름 하나씩)

 

- crontab 파일 권한 여부 확인 방법

#해당 사용자계정으로 로그인

crontab -l
crontab: can't open your crontab file
-> 1) crontab 파일 존재하는지 확인 필요 2) crontab 파일 권한 확인 필요

crontab: you are not authorized to use cron. Sorry.
-> 1) cron.allow 파일에 사용자 이름 등록 필요

 

- Crontab 사용 팁

1. 한 줄에 하나의 명령만 쓰자

# 잘못된 예
* * * 5 5
/home/script/test.sh
# 잘된 예
* * * 5 5 /home/script/test.sh

 

2. 필요할 때 주석을 달자

# 주석 #
#--------------------#
# 이것은 주석입니다. #
#--------------------#

3. 로그(log) 남겨두자

# 덮어쓰기
* * * * * /home/script/test.sh > /home/script/test.sh.log 2>&1

# 기존의 test.sh.log에 이어서 쓰기
* * * * * /home/script/test.sh >> /home/script/test.sh.log 2>&1
# 로그 확인
vi /home/script/test.sh.log

 

4. 주기적으로 백업하자

  • 혹시라도 crontab -r 를 쓰거나 실수로 crontab 디렉토리를 날려버려서 기존 크론 내역들이 날아갔을 때를 방지하여 주기적으로 크론탭을 백업하자.
# 크론탭 내용을 txt 파일로 만들어 저장
crontab -l > /home/bak/crontab_bak.txt
# 크론탭 내용을 txt 파일로 만들어 저장 (자동화)
50 23 * * * crontab -l > /home/bak/crontab_bak.txt

 

 

- Crontab 사용 시 주의할 점

crontab의 규칙에 맞게 설정을 했음에도 불구하고 동작하는 않은 경우가 발생한다. 보통 아래의 이유 때문이다.

 

1. 환경변수

  • SHELL

등록된 작업을 실행시킨 쉘을 지정한다**(크론탭은 실행시에 별도로 쉘을 띄운다)**. 지정하지 않을시 기본값으로 /bin/sh로 지정된다.

  • PATH

쉘을 별도로 띄워서 실행하는 특성때문에, 쉘에서 프로그램을 찾기위한 PATH도 별도로 지정해줄 필요가 있다.

# 매분마다 sample.sh을 실행하며 프로그램이 작동할 쉘과 경로를 지정해준다.
crontab -e

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

* * * * * sample.sh

 

2. 권한문제

  • vi /etc/crontab을 통해 크론탭을 직접 수정을 했을 경우 root 권한 명령을 실행하려면 root권한을 명시해 주어야 한다.
crontab -e
* * * * * example.sh

# 두 번째 처럼 root 권한을 명시해야 한다.
vi /etc/crontab
* * * * * root example.sh

 

3. 절대경로 / 상대경로

  • 절대경로로 작성하여 나중에 생길 오류를 방지하자.

즉,  /usr/local/bin/php74를 실행 시에는 php74 보다는 /usr/local/bin/php74로 절대 경로로 명시

 

4. 최소 반복 시간

  • 크론탭의 최소 반복시간은 1분이므로 그보다 작은 시간으로 하면 안된다.

 

 

 

 

 

 

 

 

 


Reference

http://jdm.kr/blog/2#특정_시간_실행https://jhnyang.tistory.com/m/68https://jdm.kr/blog/2https://ojava.tistory.com/154

https://finance-it.tistory.com/106

https://zetawiki.com/wiki//etc/cron.allow,_cron.deny

https://jinmay.github.io/2018/01/07/linux/basic-of-crontab/

https://tipland.tistory.com/80

'Programming > Linux' 카테고리의 다른 글

[Linux] rsync란?  (0) 2023.04.28
[Linux] /tmp와 /var/tmp의 차이  (2) 2023.03.11
[Linux] Nohup이란?  (0) 2023.03.10
[Linux] at이란?  (0) 2022.06.30

- at 스케줄링이란?

  • at 스케줄링은 주로 프로그램을 특정시간에 한 번만 사용하고 싶을 때 이용한다.

즉, 주기적으로 돌아가는 crontab과 달리 일회성이다.

 

 

- at 명령어

  • at명령어 프로그램을 사용하면 일회성의 프로세스(명령어) 실행 예약을 매우 간단하게 할 수 있다.
$ at [옵션] 시간
  • 지정한 시간에 원하는 명령을 실행할 수 있다. 간단한 알림 메시지부터 복잡한 스크립트 등
  • 예약된 작업은 /var/spool/at 디렉터리에 개별 파일로 저장된다.
  • 실행 결과는 /usr/sbin/sendmail을 통해 메일로 전송된다.
  • /etc/at.allow와 /etc/at.deny 환경설정 파일을 통해 at 명령어에 대한 접근제어가 가능하다.

 

- at 옵

옵션 설명
-V 버전을 보여준다.
-q (queue) queue 이름을 지정한다.
-f 파일명 스크립트 파일 등을 실행해 줄 때 사용한다.
-m 작업이 완료될 때 사용자에게 메일을 보낸다.
-M 메일 보내기 않기
- t [[CC]YY]MMDDhhmm[.ss] [[CC]YY]MMDDhhmm[.ss]로 시간 지정
-l 예약된 작업 목록을 보여준다.
- r 예약된 작업을 삭제한다.(unix)
-d 예약된 작업을 삭제한다.(linux)
TIME 실행할 시간을 기록한다. 기본적으로 "hh:mm YYYY-MM-DD"로 적는다. hh:mm은 시간으로 24시간제를 기본으로 한다.
  • TIME 시간대는 hh:mm yyyy-mm-dd (시간:분 연도-월-날짜)의 형식이나 now+값 (minutes/hours/days)로 현재 시간 +(분/시간/일) 단위로 설정할 수 있다.
# : 2019년 12월 25일 21시 30분에 명령어 실행
at 21:30 2019-12-25

# : 현재 시간 5분 뒤에 명령어 실행
at now+5 minutes

 

- atq

  • 현재 예약된 작업 목록을 확인하는 명령어. at -l 과 동일
qa@qa-VirtualBox:~$ atq
1    Wed Feb 9 20:00:00 202 a qa
# atq 출력 포맷
<job number> <date> <hour> <queue> <user-name>
  • 대기 큐에서 대기 중인 작업들의 목록을 확인할 수 있다.
  • 슈퍼 유저(root)인 경우에는 모든 유저의 대기 중인 작업이 출력되고, 그 외에는 로그인된 사용자의 작업이 출력된다.
  • 작업을 설정할 때 큐를 설정할 수 있고, 'a-z'의 큐가 존재하며 'a'에 가까울 수록 우선순위가 높다. 큐를 설정하지 않으면 'a'가 기본이다.

 

- atrm

  • 예약된 작업을 삭제. at -d 옵션과 동일

 

- batch

  • 시스템에 부하를 주지 않도록 실행한다.

 

- at 사용법

  • at 명령어는 시간 정보는 필수로 입력해야 하고, 그 외의 정보는 옵션이다.
  1. at 시간 명령어를 입력하고 실행한다.
  2. 그러면 at**>** 표준 입력을 할 수 있는 프롬프트 창이 나온다. 예약시간대에 이행할 명령어를 입력한다.
  3. 입력을 마치면 [Ctrl]+[D]로 종료(EOT, End Of Transmission) 하면 된다.

이렇게 하면 지정한 시간대에 해당 명령어가 실행하게 된다.

 

예시

# 내일 23시 00분에 yum update를 진행하라
[root@localhost backup]# at 23:00 tomorrow 
at> yum -y update 
at> reboot 

# 그 후, Ctrl + D 클릭
at> <EOT>
job 1 at Sun Dec 27 23:00:00 2020
[root@localhost backup]#
# 23:01 분에 git을 설치하라는 명령어를 하나더 추가했더니, job2로 저장이 된다.
[root@localhost backup]# at 23:01 tomorrow 
at> yum install git
at> reboot 

# 그 후, Ctrl + D 클릭
at> <EOT>
job 2 at Sun Dec 27 23:01:00 2020
[root@localhost backup]#

 

  • 예약된 리스트 확인
[root@localhost backup]# at -l
1      Sun Dec 27 23:00:00 2020 a root
2      Sun Dec 27 23:01:01 2020 a root
[root@localhost backup]#
  • 예약 작업 제거
[root@localhost backup]# atrm 2
1      Sun Dec 27 23:00:00 2020 a root
[root@localhost backup]#

 

 

- at 사용자 접근제어

  • at 명령어는 기본적으로 root 사용자만 사용할수 있다.
  • 단, /etc/at.allow와 /etc/at.deny 두 파일을 이용해 일반 사용자의 사용 권한을 지정해 줄 수 있다.

/etc/at.allow

  • 이 허용파일이 있는 경우 파일 내 지정된 사용자만 at를 등록할 수 있다.
  • 지정되지 않은 사용자들은 at 명령을 실행할 수 없다.

 

/etc/at.deny

  • 허용파일이 없는 경우에는 이 거부 파일이 사용된다.
  • 파일 내 지정된 사람을 제외한 나머지 사용자에게 at 명령 실행 권한이 주어진다.
  • 즉, at.deny 파일에 등록된 사용자는 at를 사용할 수 없게 된다.

두 파일 모두 없다면 루트 관리자만 사용할 수 있다.

 

 

 

 

 

 

 

 


Reference

https://inpa.tistory.com/entry/LINUX-📚-작업-스케줄러-명령어-💯-정리-at-crontab

https://freeblogger.tistory.com/13

https://ansan-survivor.tistory.com/432

'Programming > Linux' 카테고리의 다른 글

[Linux] rsync란?  (0) 2023.04.28
[Linux] /tmp와 /var/tmp의 차이  (2) 2023.03.11
[Linux] Nohup이란?  (0) 2023.03.10
[Linux] Crontab 이란?  (0) 2022.06.30

+ Recent posts