Skip to content
toylee blog
toylee blog

컴퓨터·IT 문제 해결과 최신 기술 정보

  • 홈
  • 컴퓨터 활용
  • 프로그래밍
    • 파이썬
    • 자바(Java)
    • Flutter
    • HTML
    • Linux
    • 워드프레스
  • 맥북
  • IT 일반
  • 블로그 소개
  • 문의하기
toylee blog

컴퓨터·IT 문제 해결과 최신 기술 정보

리눅스 자동화 스크립트: Bash 안전장치와 systemd timer

toylee, 2026년 02월 17일2026년 08월 27일

리눅스 자동화는 명령을 한 줄로 줄이는 작업이 아니라, 실패를 감지하고 중복 실행을 막으며 누가 언제 실행했는지 확인 가능하게 만드는 일입니다. 먼저 스크립트를 수동으로 반복 실행해도 안전한 형태로 만든 뒤 예약 작업에 연결합니다.

[목차]

  • 안전한 Bash 기본 골격
  • systemd service 만들기
  • systemd timer로 예약하기
  • cron을 쓸 때 주의할 점
  • 운영 전 체크리스트
  • 공식 참고자료
  • 관련 글

안전한 Bash 기본 골격

#!/usr/bin/env bash
set -Eeuo pipefail
umask 077

readonly lock_file="/run/lock/report-job.lock"
readonly output_dir="/srv/reports"

exec 9>"$lock_file"
flock -n 9 || {
  echo "another run is active" >&2
  exit 75
}

mkdir -p "$output_dir"
tmp="$(mktemp "$output_dir/.report.XXXXXX")"
trap 'rm -f "$tmp"' EXIT

generate-report > "$tmp"
test -s "$tmp"
mv "$tmp" "$output_dir/latest.txt"
trap - EXIT
  • set -Eeu는 오류와 미정의 변수 누락을 빨리 드러냅니다.
  • pipefail은 파이프 중간 명령의 실패도 전달합니다.
  • flock은 이전 실행이 끝나기 전에 새 작업이 겹치는 것을 막습니다.
  • 임시 파일을 완성한 뒤 mv하면 불완전한 결과 노출을 줄일 수 있습니다.

systemd service 만들기

# /etc/systemd/system/report-job.service
[Unit]
Description=Generate daily report

[Service]
Type=oneshot
User=reporter
Group=reporter
ExecStart=/usr/local/sbin/report-job
NoNewPrivileges=true
PrivateTmp=true

가능하면 root가 아닌 전용 계정으로 실행하고 필요한 디렉터리에만 쓰기 권한을 줍니다.

systemd timer로 예약하기

# /etc/systemd/system/report-job.timer
[Unit]
Description=Run report job every day

[Timer]
OnCalendar=*-*-* 03:15:00
Persistent=true
RandomizedDelaySec=10m

[Install]
WantedBy=timers.target
sudo systemctl daemon-reload
sudo systemctl enable --now report-job.timer
systemctl list-timers report-job.timer
sudo systemctl start report-job.service
journalctl -u report-job.service --since today

Persistent=true는 예약 시간에 시스템이 꺼져 있었다면 다음 부팅 후 놓친 실행을 보완합니다. 여러 서버가 같은 시각에 작업하지 않도록 RandomizedDelaySec를 사용할 수 있습니다.

cron을 쓸 때 주의할 점

cron 환경은 로그인 셸보다 PATH와 환경 변수가 제한적입니다. 실행 파일은 절대 경로를 사용하고 출력과 오류를 로그 또는 모니터링 시스템으로 보냅니다. 비밀번호를 crontab에 직접 넣지 마세요.

운영 전 체크리스트

  • 같은 작업을 두 번 실행해도 데이터가 깨지지 않는가?
  • 네트워크 오류와 디스크 부족 시 종료 코드가 0이 아닌가?
  • 실패 알림과 마지막 성공 시간을 확인할 수 있는가?
  • 로그에 비밀번호와 토큰이 출력되지 않는가?
  • 삭제 명령은 대상 경로가 비어 있지 않은지 검증하는가?

공식 참고자료

  • GNU Bash Reference Manual
  • systemd.service
  • systemd.timer

관련 글

  • PostgreSQL 백업 자동화: pg_dump와 복구 검증
  • SQLite 데이터 백업과 복구: 안전한 명령과 검증 절차

내용 검토 및 업데이트: 2026년 8월 27일

Linux IT 튜토리얼

글 탐색

Previous post
Next post

Related Posts

Linux

리눅스 파일 시스템 관리

2023년 07월 28일

리눅스는 다양한 파일 시스템을 지원합니다. 파일 시스템을 효과적으로 관리하는 것은 매우 중요합니다. 파일 시스템을 효과적으로 관리하면 데이터 유실을 방지하고 시스템 성능을 개선할 수 있습니다. 이번 글에서는 리눅스 파일 시스템 관리에 대해 알아보겠습니다. 파일 시스템 확인 리눅스에서는 다양한 파일 시스템을 지원하며, 이를 확인하는 방법은 다음과 같습니다. lsblk 명령어를 사용하여 블록 장치의…

Read More
Linux

서버 확장성과 성능 향상을 위한 방법

2023년 07월 29일

현대의 IT 시스템은 대규모 데이터 처리, 웹 트래픽 및 사용자 요구 사항의 증가로 인해 더 큰 부담을 받고 있습니다. 이에 따라 서버 성능 향상과 확장성이 중요한 문제가 되었습니다. 이 글에서는 서버 확장성과 성능 향상을 위한 몇 가지 방법을 살펴보겠습니다. 서버 확장성 향상 서버 확장성은 시스템이 더 많은 작업 부하를 처리할…

Read More
Linux

서버 가상화 기술의 이점과 단점

2023년 07월 29일

서버 가상화 기술은 현재 IT 산업에서 매우 중요한 역할을 하고 있으며, 이번 글에서는 서버 가상화 기술의 이점과 단점에 대해 자세히 살펴보도록 하겠습니다. 서버 가상화 기술의 이점 서버 가상화 기술의 가장 큰 이점 중 하나는 적은 수의 물리적 서버로 더 많은 가상 서버를 구축할 수 있다는 것입니다. 이를 통해 기업은 물리적…

Read More

최신 글

  • 윈도우 시작프로그램 정리 체크리스트: 부팅 속도 높이는 실무 요령
  • 카페 작업용 맥북 액세서리 추천 및 무게별 조합 요령
  • 로컬 개발 환경 초기화 요령: 맥과 윈도우에서 꼬인 의존성 깔끔하게 정리하기
  • img alt 속성 제대로 쓰는 방법: 웹 접근성과 검색 최적화를 위한 대체 텍스트 작성 요령
  • 구글 애드센스 심사 전 반드시 점검해야 할 필수 페이지 설정 방법

최신 댓글

보여줄 댓글이 없습니다.

보관함

  • 2026년 9월
  • 2026년 8월
  • 2026년 2월
  • 2025년 7월
  • 2025년 6월
  • 2025년 5월
  • 2025년 4월
  • 2025년 3월
  • 2025년 2월
  • 2025년 1월
  • 2024년 12월
  • 2024년 11월
  • 2024년 8월
  • 2024년 6월
  • 2024년 5월
  • 2024년 3월
  • 2024년 2월
  • 2023년 11월
  • 2023년 9월
  • 2023년 8월
  • 2023년 7월
  • 2023년 6월
  • 2023년 5월
  • 2023년 4월
  • 2023년 3월
  • 2023년 2월

카테고리

  • Flutter
  • HTML
  • IT 일반
  • Linux
  • 맥북
  • 워드프레스
  • 자바(Java)
  • 컴퓨터 활용
  • 파이썬
  • 프로그래밍

사이트 안내

  • 블로그 소개
  • 문의하기
  • 개인정보 처리방침
©2026 toylee blog | WordPress Theme by SuperbThemes