シェルスクリプトに書いた命令を指定時刻に実行する

前回の投稿「SSH接続:リモートのLinux上にローカルファイルを転送する」の続きです。
最終的な目標は、「FTP ファイル転送を指定時刻に自動実行」ですが、今回は指定時刻に処理を実行する「at コマンド」と、処理内容を書き込む「シェルスクリプト」について調べたことを書いてみます。

前提

改めて、今回の最終的な目標は「FTP ファイル転送を指定時刻に自動実行する」ですが、正確には「寝ている間でも FTP ファイル転送を指定時刻に自動実行する」なので、「手元のローカルマシンを起動しておかなければならぬ」では夢を実現できません。(多分)

なので、前回の記事のとおり、「さくらVPS にインストールした Linux」に、定められた時間に僕がどこで何をしていようとも、目的の処理を実行してもらうことをゴールとしています。

シェルスクリプト

まずはじめに、シェルスクリプトとは、実行するコマンドを書いた指示書みたいなもの。
今回の場合、シェルスクリプトに予め実行したい命令を書いておき、at コマンドで指定時刻にそれを実行することでプログラムの自動化が図れるっぽい。

  • 基本的な書き方
#!/bin/sh

% touch hoge.txt
% 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 接続して Linux の様子をうかがってみる
% 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 転送する」をクリアできれば素晴らしき日々をまた一つ獲得できる(はず)

今回は以上です。