参考 : https://ss64.com/bash/at.html
atコマンドの使い方と構文
at
コマンドは特定の時間に一度実行するコマンドをスケジュールします。
batch
コマンドはシステムの負荷状況次第で実行を先送りすることもありますが、at
コマンドは必ず実行します。
at
コマンドの後には時刻に該当する引数を入力します。
そのあとat>
で始まる入力インターフェースが起動するので、実行したいコマンドを入力し、最後にCtrl+D
で入力を終了します。
以下は、12:23
にtouch test
というコマンドを起動して、ファイルを生成するサンプルです。
[vagrant@localhost ~]$ ls [vagrant@localhost ~]$ date Wed May 15 12:21:11 UTC 2024 [vagrant@localhost ~]$ at 06:23 at> touch test at> <EOT> job 5 at Wed May 15 12:23:00 2024
しばらくすると、意図した通りtest
ファイルが生成されているのが見えると思います。
[vagrant@localhost ~]$ date Wed May 15 12:24:27 UTC 2024 [vagrant@localhost ~]$ ls test
atdデーモンを起動させておく必要がある
atコマンドを実行する際にはatdデーモンを起動させる必要があります。 atdデーモンが起動されていないまま実行すると、以下のようなエラーが出ます。
Can't open /var/run/atd.pid to signal atd. No atd running?
この時は、以下のようにservice
コマンドを使ってatd
デーモンを起動させます。
sudo service atd start
atコマンドのインストール
atコマンドはすべてのシェルに入っているわけではないので、ない場合はインストールが必要です。
以下はcentos系のディストリビューションでのatコマンドのインストールです。
sudo yum install at
実行例
[vagrant@localhost ~]$ sudo yum install at Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp Resolving Dependencies --> Running transaction check ---> Package at.x86_64 0:3.1.13-25.el7_9 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================== Package Arch Version Repository Size ======================================================================================================================== Installing: at x86_64 3.1.13-25.el7_9 updates 51 k Transaction Summary ======================================================================================================================== Install 1 Package Total download size: 51 k Installed size: 95 k Is this ok [y/d/N]: y Downloading packages: warning: /var/cache/yum/x86_64/7/updates/packages/at-3.1.13-25.el7_9.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY Public key for at-3.1.13-25.el7_9.x86_64.rpm is not installed at-3.1.13-25.el7_9.x86_64.rpm | 51 kB 00:00:03 Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Importing GPG key 0xF4A80EB5: Userid : "CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>" Fingerprint: 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5 Package : centos-release-7-8.2003.0.el7.centos.x86_64 (@anaconda) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 Is this ok [y/N]: y Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : at-3.1.13-25.el7_9.x86_64 1/1 Verifying : at-3.1.13-25.el7_9.x86_64 1/1 Installed: at.x86_64 0:3.1.13-25.el7_9 Complete!
ほとんどのディストリビューションにはデフォルトで含まれています。ほかのパッケージマネージャーなどでインストールする必要がある場合は、APTの配布にパッケージマネージャーを使用します。
sudo apt update sudo apt install sudo apt-get install
atコマンドの構文
- 指定された時間にコマンドを実行します。
at [v] [-q queue] [-f file] [-mldbv] time
- 保留中のジョブをリストアップします。
atq [-v] [-q queue]
- 保留中のジョブを指定してキャンセルします。
atrm [-V] job [job ...]
atコマンドのオプション一覧
-V, --version
バージョン情報を表示します。-q queue
ジョブを指定したキューに送信します。キューは、aからzまでの小文字およびAからZまでの大文字、ならびに数字で指定できます。-f file
コマンドを含むファイルを指定します。指定したファイルの内容が標準入力として扱われます。
[vagrant@localhost ~]$ ls test test.sh [vagrant@localhost ~]$ date Wed May 15 06:36:23 UTC 2024 [vagrant@localhost ~]$ at now + 1 minutes -f test.sh job 7 at Wed May 15 06:37:00 2024 [vagrant@localhost ~]$ date Wed May 15 06:36:51 UTC 2024 [vagrant@localhost ~]$ date Wed May 15 06:36:57 UTC 2024 [vagrant@localhost ~]$ date Wed May 15 06:36:59 UTC 2024 [vagrant@localhost ~]$ date Wed May 15 06:37:01 UTC 2024 [vagrant@localhost ~]$ ls test test1.md test2.md test.sh
-m
ジョブの完了後にユーザーにメールを送信します(標準出力や標準エラー出力にデータがある場合は自動的に送信されますが、このオプションを使うと出力がなくても送信されます)。-M
標準出力や標準エラー出力のメール送信を抑制します(ジョブが完了してもメールが送信されません)。-t time
タイムスタンプを指定してジョブを実行します。フォーマットは[CC]YYMMDDhhmm[.ss]
です。-l
キュー内のジョブをリスト表示します。atq
コマンドと同じ動作です。
[vagrant@localhost ~]$ at now + 1 minutes at> <EOT> job 6 at Wed May 15 06:36:00 2024 [vagrant@localhost ~]$ at -l 3 Wed May 15 14:30:00 2024 a vagrant 4 Wed May 15 14:30:00 2024 a vagrant 6 Wed May 15 06:36:00 2024 a vagrant
-d
指定したジョブを削除します。atrm
コマンドと同じ動作です。
[vagrant@localhost ~]$ at 12:30 at> ls at> <EOT> job 8 at Wed May 15 12:30:00 2024 [vagrant@localhost ~]$ at -l 3 Wed May 15 14:30:00 2024 a vagrant 4 Wed May 15 14:30:00 2024 a vagrant 8 Wed May 15 12:30:00 2024 a vagrant [vagrant@localhost ~]$ at -d 8 # ここで番号8を消している。 [vagrant@localhost ~]$ at -l 3 Wed May 15 14:30:00 2024 a vagrant 4 Wed May 15 14:30:00 2024 a vagrant
-v
ジョブの実行予定時刻を表示します。-c job
指定したジョブの内容を表示します。
[vagrant@localhost ~]$ at -l 3 Wed May 15 14:30:00 2024 a vagrant 4 Wed May 15 14:30:00 2024 a vagrant [vagrant@localhost ~]$ at -c 3 #!/bin/sh # atrun uid=1000 gid=1000 # mail vagrant 0 umask 2 XDG_SESSION_ID=7; export XDG_SESSION_ID HOSTNAME=localhost.localdomain; export HOSTNAME SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED SHELL=/bin/bash; export SHELL HISTSIZE=1000; export HISTSIZE SSH_CLIENT=10.0.2.2\ 50629\ 22; export SSH_CLIENT SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE SSH_TTY=/dev/pts/0; export SSH_TTY USER=vagrant; export USER LS_COLORS=rs=0:di=38\;5\;27:ln=38\;5\;51:mh=44\;38\;5\;15:pi=40\;38\;5\;11:so=38\;5\;13:do=38\;5\;5:bd=48\;5\;232\;38\;5\;11:cd=48\;5\;232\;38\;5\;3:or=48\;5\;232\;38\;5\;9:mi=05\;48\;5\;232\;38\;5\;15:su=48\;5\;196\;38\;5\;15:sg=48\;5\;11\;38\;5\;16:ca=48\;5\;196\;38\;5\;226:tw=48\;5\;10\;38\;5\;16:ow=48\;5\;10\;38\;5\;21:st=48\;5\;21\;38\;5\;15:ex=38\;5\;34:\*.tar=38\;5\;9:\*.tgz=38\;5\;9:\*.arc=38\;5\;9:\*.arj=38\;5\;9:\*.taz=38\;5\;9:\*.lha=38\;5\;9:\*.lz4=38\;5\;9:\*.lzh=38\;5\;9:\*.lzma=38\;5\;9:\*.tlz=38\;5\;9:\*.txz=38\;5\;9:\*.tzo=38\;5\;9:\*.t7z=38\;5\;9:\*.zip=38\;5\;9:\*.z=38\;5\;9:\*.Z=38\;5\;9:\*.dz=38\;5\;9:\*.gz=38\;5\;9:\*.lrz=38\;5\;9:\*.lz=38\;5\;9:\*.lzo=38\;5\;9:\*.xz=38\;5\;9:\*.bz2=38\;5\;9:\*.bz=38\;5\;9:\*.tbz=38\;5\;9:\*.tbz2=38\;5\;9:\*.tz=38\;5\;9:\*.deb=38\;5\;9:\*.rpm=38\;5\;9:\*.jar=38\;5\;9:\*.war=38\;5\;9:\*.ear=38\;5\;9:\*.sar=38\;5\;9:\*.rar=38\;5\;9:\*.alz=38\;5\;9:\*.ace=38\;5\;9:\*.zoo=38\;5\;9:\*.cpio=38\;5\;9:\*.7z=38\;5\;9:\*.rz=38\;5\;9:\*.cab=38\;5\;9:\*.jpg=38\;5\;13:\*.jpeg=38\;5\;13:\*.gif=38\;5\;13:\*.bmp=38\;5\;13:\*.pbm=38\;5\;13:\*.pgm=38\;5\;13:\*.ppm=38\;5\;13:\*.tga=38\;5\;13:\*.xbm=38\;5\;13:\*.xpm=38\;5\;13:\*.tif=38\;5\;13:\*.tiff=38\;5\;13:\*.png=38\;5\;13:\*.svg=38\;5\;13:\*.svgz=38\;5\;13:\*.mng=38\;5\;13:\*.pcx=38\;5\;13:\*.mov=38\;5\;13:\*.mpg=38\;5\;13:\*.mpeg=38\;5\;13:\*.m2v=38\;5\;13:\*.mkv=38\;5\;13:\*.webm=38\;5\;13:\*.ogm=38\;5\;13:\*.mp4=38\;5\;13:\*.m4v=38\;5\;13:\*.mp4v=38\;5\;13:\*.vob=38\;5\;13:\*.qt=38\;5\;13:\*.nuv=38\;5\;13:\*.wmv=38\;5\;13:\*.asf=38\;5\;13:\*.rm=38\;5\;13:\*.rmvb=38\;5\;13:\*.flc=38\;5\;13:\*.avi=38\;5\;13:\*.fli=38\;5\;13:\*.flv=38\;5\;13:\*.gl=38\;5\;13:\*.dl=38\;5\;13:\*.xcf=38\;5\;13:\*.xwd=38\;5\;13:\*.yuv=38\;5\;13:\*.cgm=38\;5\;13:\*.emf=38\;5\;13:\*.axv=38\;5\;13:\*.anx=38\;5\;13:\*.ogv=38\;5\;13:\*.ogx=38\;5\;13:\*.aac=38\;5\;45:\*.au=38\;5\;45:\*.flac=38\;5\;45:\*.mid=38\;5\;45:\*.midi=38\;5\;45:\*.mka=38\;5\;45:\*.mp3=38\;5\;45:\*.mpc=38\;5\;45:\*.ogg=38\;5\;45:\*.ra=38\;5\;45:\*.wav=38\;5\;45:\*.axa=38\;5\;45:\*.oga=38\;5\;45:\*.spx=38\;5\;45:\*.xspf=38\;5\;45:; export LS_COLORS MAIL=/var/spool/mail/vagrant; export MAIL PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/vagrant/.local/bin:/home/vagrant/bin; export PATH PWD=/home/vagrant; export PWD LANG=en_US.UTF-8; export LANG SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED HISTCONTROL=ignoredups; export HISTCONTROL SHLVL=1; export SHLVL HOME=/home/vagrant; export HOME LOGNAME=vagrant; export LOGNAME SSH_CONNECTION=10.0.2.2\ 50629\ 10.0.2.15\ 22; export SSH_CONNECTION LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN XDG_RUNTIME_DIR=/run/user/1000; export XDG_RUNTIME_DIR cd /home/vagrant || { echo 'Execution directory inaccessible' >&2 exit 1 } ${SHELL:-/bin/sh} << 'marcinDELIMITER50f8363c' ls marcinDELIMITER50f8363c
現在の時刻から逆算して予約する
at コマンドを使用して、現在の時刻から1分後にコマンドを実行する方法
at now + 1 minute
関連ファイル一覧
/was/spool/at
/was/spool/at/spool
/was/run/utmp
/etc/at.allow
/etc/at.eny
例
page:https://minegishirei.hatenablog.com/entry/2024/05/13/193944
reinforce:2024/05/15