シェルスクリプトに書いた命令を指定時刻に実行する
前回の投稿「SSH接続:リモートのLinux上にローカルファイルを転送する」の続きです。
最終的な目標は、「FTP ファイル転送を指定時刻に自動実行」ですが、今回は指定時刻に処理を実行する「at
コマンド」と、処理内容を書き込む「シェルスクリプト」について調べたことを書いてみます。
前提
改めて、今回の最終的な目標は「FTP ファイル転送を指定時刻に自動実行する」ですが、正確には「寝ている間でも FTP ファイル転送を指定時刻に自動実行する」なので、「手元のローカルマシンを起動しておかなければならぬ」では夢を実現できません。(多分)
なので、前回の記事のとおり、「さくらVPS にインストールした Linux」に、定められた時間に僕がどこで何をしていようとも、目的の処理を実行してもらうことをゴールとしています。
シェルスクリプト
まずはじめに、シェルスクリプトとは、実行するコマンドを書いた指示書みたいなもの。
今回の場合、シェルスクリプトに予め実行したい命令を書いておき、at
コマンドで指定時刻にそれを実行することでプログラムの自動化が図れるっぽい。
- 基本的な書き方
#!/bin/sh % touch hoge.txt
- シェルスクリプトのファイルは拡張子
.sh
で作成する - 1 行目には
#!/bin/sh
と書く- システムに「ここからシェルスクリプトを書きますよ」と宣言するものらしい
- 以下のようにコマンド実行すると、シェルスクリプトを動かすことができる
% sh hoge.sh
at コマンド
デフォルトで at
が入っていないのでインストールする。
% sudo apt install at
指示を書いたシェルスクリプトを指定時刻に実行するには、以下のように記述するようだ。
# 2022年9月19日 10:00 に hoge.sh の内容を実行 % at -f hoge.sh 10:00 091922
その他、使いそうなコマンド。
- 実行予定のジョブ一覧を表示
% at -l
- 実行予定のジョブを削除
% at -d <ジョブ番号>
- 実行予定のジョブ内容を表示
% at -c <ジョブ番号>
シェルスクリプトに書いた命令を指定時刻に実行する
上記までの例のまんまだが、一連の流れを再現してみる。
- まずは
hoge.sh
というファイル名でシェルスクリプトを作る% vim hoge.sh
- 記載内容は下記で
hoge.txt
というファイルを作るだけの内容
#!/bin/sh % touch hoge.txt
- 続いて
at
コマンドで実行する時刻を指定する
% at -f hoge.sh 13:10 091922
- ジョブが登録されているか確認してみる
% at -l 5 Mon Sep 19 13:10:00 2022 a htksn
- ちゃんと登録されているっぽいので、一旦 Linux から抜ける
- 指定した時間がくるまでソワソワしながら正座待機
% exit
% ssh htksn % lsa (中略) -rw-r--r-- 1 htksn htksn 26 Sep 19 13:03 hoge.sh -rw-r--r-- 1 htksn htksn 0 Sep 19 13:10 hoge.txt (中略)
やったね!!
まとめ
ここまでで、「ローカルのファイルをリモートの Linux 環境に送る」と、「リモートの Linux 環境で指定時刻に処理を実行する」までは実現できた。
残りは「ファイルを FTP 転送する」をクリアできれば素晴らしき日々をまた一つ獲得できる(はず)
今回は以上です。