今回はsystemctlを用いてUbuntu上で特定のスクリプトを定期自動実行させる設定を行います。例としてPostgreSQLのバックアップを定期実行する形とします。
| 項目 | バージョン |
|---|---|
| Ubuntu | 22.04.05LTS |
| PostgreSQL | 14.18 |
■手順
手順を簡単に整理します。
- 自動実行させたい処理を記述したシェルスクリプトを作成
- シェルスクリプトに実行権限を付与
- 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時にバックアップが取得されることを確認して終了です。
コメントを残す