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일

이 포괄적인 안내서는 서버 설정 및 구성에 대한 자세한 지침을 제공합니다. 서버 설정은 비즈니스 운영의 기초로서 안전한 데이터 보호와 원활한 비즈니스 운영을 보장하는 데 중요한 역할을 합니다. 이 안내서는 서버 설정 및 구성을 위한 필수 단계와 각 단계에 대한 중요한 고려 사항을 설명합니다. 서버 설정 서버를 설정하기 전에 필요한 하드웨어…

Read More
Linux

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

2023년 07월 29일

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

Read More
Linux

리눅스 기본 사용법과 명령어 소개

2023년 07월 28일

리눅스는 유닉스(UNIX) 계열의 운영체제에 속하는 인기 오픈소스 운영체제(OS)로 서버와 개발 환경에서 널리 사용되는 Ubuntu, CentOS, Debian 등 다양한 배포판이 존재하며, 이 글에서는 리눅스의 기본적인 사용법과 명령어에 대해 자세히 소개하겠습니다. 파일 및 디렉터리 명령 다음은 리눅스에서 파일 및 디렉터리를 처리하기 위한 명령입니다: – ls’: 현재 디렉터리에 있는 파일과 디렉터리를 나열합니다. 이…

Read More

최신 글

  • 브라우저 캐시 삭제가 필요한 경우와 안전하게 정리하는 방법 정리
  • 맥북 발열 줄이는 기본 설정: 성능과 배터리를 지키는 실천 방법
  • 에러 로그 읽는 습관 만들기: 개발 속도를 높이는 실전 분석 요령
  • HTML 링크 태그 접근성 체크리스트: 누구나 이용하기 쉬운 웹사이트 만드는 방법
  • 워드프레스 글 발행 체크리스트: 놓치기 쉬운 7가지 필수 점검 항목

최신 댓글

보여줄 댓글이 없습니다.

보관함

  • 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