Tutoriel Linux

Linux에서 영구적인 크론 작업을 생성하지 않고 단일 명령어를 프로그래밍하기

Débutant2 min de lecture

오늘 밤, 내일 아침, 또는 유지 관리 창 후에 단 한 번의 명령을 실행해야 합니까? at은 잊어버릴 크론 작업을 만드는 것을 피합니다. 그러나 하나의 제약이 있습니다: atd 서비스가 실행 중이어야 하며, 명령은 /bin/sh에 의해 실행되며 반드시 당신의 대화형 셸이 아닙니다.

아래 방법은 작업을 예약하고, 제어하고, 실행 전에 삭제하는 방법을 제공합니다. 스크립트와 로그 파일에는 절대 경로를 사용하세요. at 작업은 당신의 터미널이나 모든 Bash 설정의 혜택을 누리지 못합니다.

서버, 시계 및 캘린더 근처의 턱스를 사용하여 리눅스에서 단일 명령을 예약하기
atd 서비스가 예약된 시간에 단일 명령을 실행합니다.

at 설치 및 서비스 확인

Debian, Ubuntu 및 해당 파생 제품에서는 패키지를 설치한 후 데몬을 활성화하세요. Fedora, RHEL 또는 Rocky Linux에서는 apt를 dnf로 대체하세요.

sudo apt update
sudo apt install at
sudo systemctl enable --now atd
systemctl status atd --no-pager

상태는 active (running)로 표시되어야 합니다. 만약 귀하의 계정이 거부되면, /etc/at.allow와 /etc/at.deny를 확인하세요. 이 파일들은 어떤 사용자가 작업을 제출할 권리가 있는지를 결정합니다.

크론 없이 명령 예약하기

시스템을 건드리지 않고 테스트하려면, 개인 폴더에 5분 후에 작은 파일을 생성하세요. 명령을 입력한 다음 Ctrl + D를 눌러 완료하세요.

at now + 5 minutes
mkdir -p "$HOME/at-test"
date > "$HOME/at-test/executed-at.txt"
# 그런 다음 Ctrl+D를 누릅니다.

실제 작업을 위해서는 상대 경로를 피하세요. 다음 작업은 내일 02:30에 서비스를 재시작하고 stdout 및 stderr를 알려진 로그에 보존합니다:

at 02:30 tomorrow
/usr/bin/systemctl restart mon-service.service >> /var/log/mon-service-at.log 2>&1
# 그런 다음 Ctrl+D를 누릅니다.

네트워크 또는 서비스가 중단될 수 있는 변경을 하기 전에 명령을 수동으로 확인하지 않고 재시작하거나 원격 수정을 예약하지 마세요. SSH로 작업할 경우 네트워크 또는 서비스를 중단할 수 있는 변경 전에 두 번째 세션을 열어 두세요.

작업 다시 읽기 및 머신 시간 확인

atq는 대기 중인 작업과 그 식별자를 표시합니다. at -c는 실제로 기록된 스크립트를 볼 수 있게 해줍니다. 변수가 사용되거나 현재 디렉토리 또는 리디렉션이 명령에 필요한 경우 이 확인이 유용합니다.

atq
at -c 7
timedatectl status

7을 atq에서 표시된 번호로 대체하세요. timedatectl status로 시간대를 확인하는 것도 잊지 마세요. at에 입력된 날짜는 데몬을 실행하는 머신에서 해석됩니다. UTC로 설정된 서버는 귀하의 컴퓨터에서 표시된 시간에 작업을 반드시 실행하지 않을 것입니다.

실행 전 작업 취소하기

삭제는 즉시 이루어집니다. 식별자를 가져오고 작업을 삭제한 후 atq를 다시 실행하여 사라졌는지 확인하세요.

atrm 7
atq

at를 사용하여 일회성 작업을 수행하세요: 마이그레이션 후 정리, 단일 재시작 또는 지연된 테스트. 반복적인 작업을 위해서는 cron 및 crontab 또는 systemd 타이머를 사용하는 것이 좋습니다. 특히 한 번만 예약된 명령이 잊혀진 자동화로 변하지 않도록 하세요.