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월 28일

요즘 많은 기업들이 클라우드 서비스를 이용하고 있습니다. 클라우드 서비스는 기업이 자체 서버를 구축하는 것에 비해 많은 비용과 노력을 절약할 수 있는 장점이 있습니다. 그러나 클라우드 서비스를 이용하면 새로운 문제가 생길 수도 있습니다. 이 때, 서버 부하 분산 기술과 로드 밸런싱을 사용하면 이러한 문제를 해결할 수 있습니다. 서버 부하 분산 기술…

Read More
Linux

리눅스 메일 서버 설정 및 사용방법

2024년 05월 11일

리눅스 메일 서버 설정과 운영은 중요한 IT 관리 작업 중 하나입니다. 메일 서버는 조직 내 협업 및 의사 소통에서 핵심적인 역할을 하며, 이를 올바르게 설정하고 운영하는 것은 전체 시스템의 안정성과 보안에 중요한 영향을 미칩니다. 이 문서는 리눅스 환경에서 메일 서버를 설정하고 운영하는 방법에 대해 자세히 다룹니다. 리눅스 메일 서버 구축에 관심이 있는 분들에게 도움이 될 것입니다.

Read More

최신 글

  • 시맨틱 태그를 써야 하는 이유: 웹페이지 품질을 높이는 기본 원리 정리
  • 워드프레스 스팸 댓글 관리 기본 설정 및 차단 대처 요령
  • 파이썬 CSV 자동 정리 스크립트 작성법: 데이터 전처리 요령
  • 브라우저 캐시 삭제가 필요한 경우와 상황별 대처 요령 정리
  • 맥북 발열 줄이는 기본 설정: 성능 저하를 막는 실무 관리 요령

최신 댓글

보여줄 댓글이 없습니다.

보관함

  • 2026년 10월
  • 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