プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

atコマンドのオプション一覧 【linuxコマンド】

参考 : https://ss64.com/bash/at.html

atコマンドの使い方と構文

atコマンドは特定の時間に一度実行するコマンドをスケジュールします。 batchコマンドはシステムの負荷状況次第で実行を先送りすることもありますが、atコマンドは必ず実行します。

atコマンドの後には時刻に該当する引数を入力します。 そのあとat>で始まる入力インターフェースが起動するので、実行したいコマンドを入力し、最後にCtrl+Dで入力を終了します。

以下は、12:23touch 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