Ubuntu上での自動ジョブ実行(PostgreSQLのバックアップ)

Published by

on

今回はsystemctlを用いてUbuntu上で特定のスクリプトを定期自動実行させる設定を行います。例としてPostgreSQLのバックアップを定期実行する形とします。

項目バージョン
Ubuntu22.04.05LTS
PostgreSQL14.18

■手順

手順を簡単に整理します。

  1. 自動実行させたい処理を記述したシェルスクリプトを作成
  2. シェルスクリプトに実行権限を付与
  3. systemctlを用いて定期実行の設定

■スクリプトの作成

今回は/usr/local/bin配下にシェルスクリプトを保存します。

sudo touch /usr/local/bin/pg_backup.sh
sudo vi /usr/local/bin/pg_backup.sh

ここでは以下のような内容でPostgreSQLのバックアップスクリプトを作成しました。

#!/bin/bash

BACKUP_DIR="/var/backups/postgresql"
DATE=$(date +\%Y-\%m-\%d_\%H-\%M)
DB_NAME="helloworld"
DB_USER="hellouser"
LOG_FILE="$BACKUP_DIR/backup_$DATE.log"

mkdir -p "$BACKUP_DIR"
pg_dump -U "$DB_USER" "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_$DATE.sql" 
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -exec rm {} \;

上記のスクリプトとは別にPostgreSQL用のパスワードファイルを作成しておきます。

vi ~/.pgpass
localhost:5432:*:hellouser:hellopwd
chmod 600 ~/.pgpass

■実行権限付与

さきほど作成した「pg_backup.sh」の実行権限を付与します。

sudo chmod +x /usr/local/bin/pg_backup.sh

■サービスファイルの作成

systemctlで管理するサービスとして以下の内容で「/etc/systemd/system/pg_backup.service」を作成します。

[Unit]
Description=PostgreSQL Backup Service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/pg_backup.sh

■タイマーファイルの作成

先ほど作成したサービスファイルを実際に実行するタイミングを指定するタイマーファイルを作成します。「/etc/systemd/system/pg_backup.timer」として作成し、毎日2時に実行する設定とします。

[Unit]
Description=Runs PostgreSQL Backup Daily

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target

■サービスの有効化

用意したサービス、タイマーをそれぞれ有効化しておきます。

sudo systemctl daemon-reload
sudo systemctl enable pg_backup.timer

これで毎日2時にバックアップが取得されることを確認して終了です。

コメントを残す

Previous Post