![]()
서버 관리를 하다 보면 일반 패키지와 보안 패키지 업데이트하라는 안내가 나오는 경우가 있다.
막상 업데이트를 하려고 하면 재 부팅도 필요해서 계속 안 하게 된다. 새벽에 처리하고 아침에 확인하기 위해서는 아래와 같이 1회성 예약을 통해 진행할 수 있다.
at 명령어를 활용한 일회성 작업 예약
반복 작업과 일회성 작업의 구분
리눅스 서버 관리자들은 주기적인 백업이나 로그 정리를 위해 주로 cron을 사용합니다. 하지만 시스템 패키지 업데이트나 커널 패치 후 재부팅과 같이 단발성으로 끝나는 작업에는 cron 설정을 수정하는 것이 번거롭고 비효율적일 수 있습니다. 이때 사용하는 것이 at 명령어입니다.
현재 서버에 800개 이상의 패키지 업데이트가 대기 중인 상황이라면, 트래픽이 발생하는 주간에 작업을 수행하는 것은 서비스 안정성에 위험을 줄 수 있습니다. 관리자가 직접 새벽에 일어나 작업을 수행하는 대신, at 명령어를 통해 서버가 가장 한가한 시간에 스스로 업데이트하고 재부팅하도록 설정할 수 있습니다.
필수 패키지 설치 및 데몬 확인
대부분의 리눅스 배포판에 at이 기본적으로 포함되어 있으나, 최소 설치 버전에서는 누락되어 있을 수 있습니다. 작업을 예약하기 전에 패키지가 설치되어 있는지 확인하고, 관련 데몬(atd)이 실행 중이어야 예약된 작업이 정상적으로 트리거 됩니다.
CentOS 또는 RHEL 계열과 Ubuntu 또는 Debian 계열에 따라 설치 명령어가 다릅니다. 설치 후에는 반드시 시스템 부팅 시 자동으로 데몬이 시작되도록 활성화 설정을 진행해야 합니다.
CentOS/RHEL 계열 yum install at -y systemctl start atd systemctl enable atd Ubuntu/Debian 계열 apt-get install at -y systemctl start atd systemctl enable atd
자동 업데이트 및 재부팅 시나리오 설정
작업 예약 명령어 입력 절차
작업을 예약하려면 at [시간] 형식을 터미널에 입력합니다. 예를 들어 새벽 4시에 작업을 수행하려면 at 04:00을 입력하고 엔터를 누릅니다. 그러면 프롬프트가 at> 모양으로 변경되며, 이때 수행할 구체적인 명령어들을 입력할 수 있는 상태가 됩니다.
여기서 가장 중요한 점은 업데이트 명령어인 yum update 뒤에 반드시 -y 옵션을 붙여야 한다는 것입니다. 이 옵션이 없으면 업데이트 중간에 사용자 확인(y/n)을 묻는 단계에서 프로세스가 멈춰버려 작업이 완료되지 않습니다. 명령어 입력이 끝나면 Ctrl + D 키를 눌러 저장을 완료합니다.
[root@server ~]# at 04:00 at> yum update -y && reboot at> <EOT>
명령어 연계와 안전장치
위 예시에서 사용된 && 연산자는 앞선 명령어(업데이트)가 에러 없이 성공적으로 완료되었을 때만 뒤따르는 명령어(재부팅)를 실행하라는 의미입니다. 이는 업데이트 과정에서 문제가 발생했을 경우 무리하게 재부팅을 시도하지 않도록 하는 최소한의 안전장치 역할을 합니다.
만약 업데이트 성공 여부와 관계없이 무조건 재부팅을 해야 하는 상황이라면 세미콜론(;)을 사용하여 yum update -y; reboot와 같이 명령어를 연결할 수도 있습니다. 서버의 상태와 업데이트의 성격에 따라 적절한 연산자를 선택해야 합니다.
예약 작업 검증 및 취소
대기 중인 작업 리스트 확인
설정이 끝난 후에는 atq 명령어를 사용하여 작업이 큐(Queue)에 정상적으로 등록되었는지 확인해야 합니다. 명령어를 입력하면 작업 번호, 실행 예정 시간, 작업을 예약한 사용자 계정 등의 정보가 출력됩니다.
출력된 결과에서 시간 설정이 올바른지 다시 한번 검토하는 것이 좋습니다. 여러 개의 작업이 예약되어 있다면 각 라인 앞에 표시된 고유한 작업 번호(Job ID)를 통해 구분이 가능합니다.
[root@server ~]# atq 2 Wed Dec 25 04:00:00 2024 a root
잘못된 예약 삭제하기
예약 시간을 잘못 입력했거나 업데이트 계획이 취소된 경우, atrm 명령어를 사용하여 예약된 작업을 삭제할 수 있습니다. 앞서 atq 명령어로 확인한 작업 번호를 인자값으로 전달하면 즉시 삭제됩니다.
예를 들어 작업 번호가 2번인 예약을 취소하려면 atrm 2를 입력합니다. 삭제 후 다시 atq를 실행하여 목록이 비어있는지 확인하면, 새벽에 원치 않는 업데이트가 실행되는 것을 방지할 수 있습니다.