Peter 工程日誌

如何在Ubuntu 16.04與18.04上使用at指令進行一次性排程

前言

最近有一台主機上面的服務的階段性任務已經達成了,而上面的主機相關的檔案需要進行封存,而剛好備份有時間上的要求,需求如下:

從上述的指定時間來看,明顯是有一個指定的時間需要做指定的事情。

而主要每個排程有兩個備份的工作:

想到這邊,可能一開始靈光一現,會想到使用Cron服務與crontab指令來解決,但是不然,原因是因為Cron排程是一個循環工作,一個固定時間週而復始的執行,那上述的需求就不適合了。

本文章中,將會介紹與利用at指令進行上述的方式達成上述的單一指定時間的排程工作。

前置條件

安裝at套件

要開始使用at套件之前,需要先將此套件給安裝好,安裝方式如下:


sudo apt-get update

sudo apt-get install at

成功安裝好at套件之後,則可以使用下列的指令進行檢查目前at服務的運行狀況:


# 檢查目前at服務狀態

sudo systemctl status atd.service

# 檢查目前at服務是否已經啟用

sudo systemctl is-enabled atd.service

# enabled

接著,可以利用下面的指令來測試一下 at 指令該如何使用,使用方式有下列幾種:


logger "Hello from at" | at now + 10 minute

上述意思是,在現在時間後的10分鐘會將前面的 Hello from at文字訊息寫到/var/log/syslog的檔案裡面。


logger "Hello from at" | at "17:00"

上述意思是,在今天的下午17:00會將前面的 Hello from at文字訊息寫到/var/log/syslog的檔案裡面。


logger "Hello from at" | at "17:00 June 30"

上述意思是,在今年的6/30的下午17:00會將前面的 Hello from at文字訊息寫到/var/log/syslog的檔案裡面。


logger "Hello from at" | at "17:00 June 30 2020"

上述意思是,在2020年的6/30的下午17:00會將前面的 Hello from at文字訊息寫到/var/log/syslog的檔案裡面。

還有很多種方法,不過基本上上述的指令就已經很夠用了。

接著,還需要有備份的指令,因此我們先產生出下列的備份資料庫指令:


#!/bin/bash

MYSQL_USER="user"

MYSQL_PASSWORD="password"

BACKUP_DIR="/backup/directory"

db="database_name"

backupName="backup_database_archive_file_name"

/usr/bin/mysqldump --lock-tables=false --single-transaction --quick --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > $BACKUP_DIR"/"$backupName

接著,產生出備份全系統的指令:


cd /

tar -cvpzf /mnt/user/backup_root_fs.tar.gz --one-file-system /

上述指令指的是:

接著將上述的檔案合寫成一個shell script,並取名叫做backup.sh,其檔案內容如下:


#!/bin/bash

MYSQL_USER="user"

MYSQL_PASSWORD="password"

BACKUP_DIR="/backup/directory"

db="database_name"

backupName="backup_database_archive_file_name"

/usr/bin/mysqldump --lock-tables=false --single-transaction --quick --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > $BACKUP_DIR"/"$backupName

cd /

tar -cvpzf /mnt/user/backup_root_fs.tar.gz --one-file-system /

接著再搭配at指令就會變成:


at "18:30 June 29 2020" -f ./backup.sh

at "18:30 July 4 2020" -f ./backup.sh

接著可以使用 atq 或是 at -l 指令看到如下的排程工作清單:


10 Tue Jun 30 18:30:00 2020 a user
9 Sat July 04 18:20:00 2020 a user

上述的排程工作描述為:

這樣就完成了使用at指令設定排程了。

若要刪除某個at清單中的工作排程,則可以使用atrm這個指令刪除,使用方式如下:


atrm 11

上述指令的意思是,工作編號為11的排程進行刪除。

參考資料

Exit mobile version