command & # 백그라운드로 실행Ctrl + Z # 실행 중 작업을 일시 정지(suspend)jobs # 현재 셸의 작업 목록jobs -l # PID와 함께 표시bg %1 # 1번 작업을 백그라운드에서 재개fg %1 # 1번 작업을 포그라운드로 가져옴kill %1 # 작업 번호로 종료nohup command & # 로그아웃해도 계속 실행disown %1 # 작업을 셸에서 분리
동작
명령/키
백그라운드 실행
command &
일시 정지
Ctrl + Z (SIGTSTP)
작업 목록
jobs
백그라운드 재개
bg %번호
포그라운드 전환
fg %번호
로그아웃 후 유지
nohup ... &
Ctrl + Z는 작업을 일시 정지(멈춤), Ctrl + C는 종료(SIGINT)다. 멈춘 작업은 bg로 백그라운드 재개하거나 fg로 다시 불러온다. 작업은 %번호로 가리킨다. 로그아웃해도 살아남게 하려면 nohup을 앞에 붙이고 &로 백그라운드 실행한다.
crontab -e # 현재 사용자의 crontab 편집crontab -l # 등록된 cron 작업 목록crontab -r # 모든 cron 작업 삭제 (주의!)crontab -u alice -e # alice의 crontab 편집 (root)crontab -u alice -l # alice의 crontab 목록# 작성 예시 (분 시 일 월 요일 명령)0 3 * * * /backup/daily.sh # 매일 03:0030 2 * * 0 /backup/weekly.sh # 매주 일요일 02:300 0 1 * * /backup/monthly.sh # 매월 1일 00:00*/15 * * * * /check/health.sh # 15분마다0 9-18 * * 1-5 /work/poll.sh # 평일 9~18시 매시 정각
crontab -e(편집), crontab -l(목록), crontab -r(전체 삭제)이 핵심 3종이다. -r은 확인 없이 전부 지우므로 위험하다. "매일 새벽 3시"는 0 3 * * *처럼 분-시-일-월-요일 순으로 적는다.
⚠️ 함정: crontab -r은 확인 없이 모든 작업을 삭제한다. 편집(-e)과 혼동하면 큰일이다. cron 사용 허용/차단은 /etc/cron.allow(허용 목록)와 /etc/cron.deny(차단 목록)로 제어한다. allow가 있으면 거기 적힌 사용자만, 없으면 deny에 없는 사용자가 쓸 수 있다.
at 10:30 # 오늘 10:30에 실행 (대화형 입력)at now + 2 hours # 2시간 뒤at 9am tomorrow # 내일 오전 9시at 14:00 2026-06-10 # 특정 날짜·시각# 입력 후 명령 적고 Ctrl+D로 등록atq # 예약된 at 작업 목록atrm 3 # 3번 작업 삭제batch # 시스템 부하가 낮을 때 실행
도구
용도
반복
cron
정기 반복 작업
반복 O
at
일회성 미래 작업
반복 X
batch
부하 낮을 때 한 번
반복 X
at은 한 번, cron은 반복이라는 점이 핵심 구분이다. at 작업 목록은 atq, 삭제는 atrm이다. at 사용 권한도 /etc/at.allow, /etc/at.deny로 제어한다.
# 서비스 제어systemctl start nginx # 시작systemctl stop nginx # 중지systemctl restart nginx # 재시작systemctl reload nginx # 설정만 다시 읽기(무중단)systemctl status nginx # 상태 확인# 부팅 자동 시작systemctl enable nginx # 부팅 시 자동 시작 등록systemctl disable nginx # 자동 시작 해제systemctl enable --now nginx # 등록 + 즉시 시작systemctl is-enabled nginx # 자동시작 여부 확인systemctl is-active nginx # 실행 중 여부 확인# 전체 목록systemctl list-units --type=service # 실행 중 서비스systemctl list-unit-files --type=service # 모든 서비스 + enable 여부
작업
명령
즉시 시작
systemctl start 서비스
부팅 자동 시작 등록
systemctl enable 서비스
등록 + 즉시 시작
systemctl enable --now 서비스
상태 확인
systemctl status 서비스
설정 reload
systemctl reload 서비스
start/stop은 지금 동작, enable/disable은 부팅 시 자동 시작 여부다. 둘은 별개다 — enable만 하면 지금은 안 돌고, start만 하면 재부팅 후 안 돈다. "부팅 후에도 자동 시작"이 조건이면 반드시 enable이 필요하다. 한 번에 하려면 enable --now.
# 런레벨 ↔ systemd targetsystemctl get-default # 기본 부팅 target 확인systemctl set-default multi-user.target # CLI 모드로 부팅systemctl set-default graphical.target # GUI 모드로 부팅systemctl isolate multi-user.target # 즉시 전환# 전원 관리systemctl reboot # 재부팅systemctl poweroff # 종료
옛 런레벨
systemd target
의미
0
poweroff.target
종료
1
rescue.target
단일 사용자
3
multi-user.target
텍스트 다중 사용자
5
graphical.target
GUI
6
reboot.target
재부팅
런레벨 3(텍스트)은 multi-user.target, 런레벨 5(GUI)는 graphical.target에 대응한다. 기본 부팅 모드는 systemctl set-default로 바꾼다. 옛 init 3, init 5도 systemd가 호환 처리한다.
# 유닛 파일 수정 후 반드시systemctl daemon-reload # systemd가 유닛 변경 다시 읽기systemctl restart myapp
위치
용도
/usr/lib/systemd/system/
패키지가 설치한 기본 유닛
/etc/systemd/system/
관리자가 만든/덮어쓴 유닛(우선)
유닛 파일을 새로 만들거나 고친 뒤에는 반드시 systemctl daemon-reload를 실행해야 systemd가 변경을 인식한다. 이걸 빼면 start해도 옛 설정이 적용된다. 또 부팅 자동 시작은 유닛의 [Install] 섹션 WantedBy와 systemctl enable로 완성된다.
journalctl # 전체 로그journalctl -u nginx # 특정 서비스 로그journalctl -f # 실시간 추적(tail -f처럼)journalctl -b # 이번 부팅 이후 로그journalctl --since "1 hour ago" # 최근 1시간journalctl -p err # 에러 레벨 이상만
systemd 환경의 로그는 journalctl로 본다. 특정 서비스는 -u 서비스명, 실시간 추적은 -f다. 전통적 /var/log/messages, /var/log/syslog도 여전히 있지만 systemd 서비스 로그는 journal에 모인다.