As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

POSIX1日1コマンド[part9]: bg

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

bg

bg

とりあえず使ってみる

  • 事前準備
# カレントディレクトリのファイル確認
[vagrant@localhost 009]$ ls
file1  file2  file3
# 一秒ごとにlsした結果をlogに追記し、一定時間後に中断する。
[vagrant@localhost 009]$ while true; do ls; sleep 1s; done >> log_1
[Ctrl + C]
# ファイルの中身確認
[vagrant@localhost 009]$ cat log_1
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
file1
file2
file3
log
  • jobを作る
# 1秒ごとにdateコマンドを実行
[vagrant@localhost 009]$ while true; do date; sleep 1s; done >> log_2      
^Z ([Ctrl + z]で一時停止しjobとして保持)
[1]+  Stopped                 sleep 1s

# 1秒ごとにlsコマンドを実行
[vagrant@localhost 009]$ while true; do ls; sleep 1s; done >> log_1
^Z [Ctrl + z]で一時停止しjobとして保持)
[2]+  Stopped                 sleep 1s

Ctrl+z-はSIGTSTPシグナルで、プロセスの一時停止を行うときに使う

  • jobの確認
# jobの確認
[vagrant@localhost 009]$ jobs
[1]-  Stopped                 sleep 1s
[2]+  Stopped                 sleep 1s

ふたつの停止しているjobがある。

  • バックグラウンドで実行するようにする。
[vagrant@localhost 009]$ bg 1
[1]+ sleep 1s &
[vagrant@localhost 009]$ jobs
[1]-  Done                    sleep 1s
[2]+  Stopped                 sleep 1s

バックグラウンドで実行されたことがわかる。(だが、継続処理はされない。)

  • 処理に時間がかかるもの

処理に時間がかかるものの場合どうか。 sleepで1000秒待ってみる。

[vagrant@localhost 009]$ sleep 1000
^Z
[vagrant@localhost 009]$ jobs
[3]+  Stopped                 sleep 1000
[vagrant@localhost 009]$ bg 3
[3]+ sleep 1000 &
[vagrant@localhost 009]$ jobs
[3]+  Running                 sleep 1000 &

バックグラウンドで実行(Running)されていることがわかる。

ざっくり使い方

bc [-l] [file...]

ざっくりDESCRIPTION

バックグラウンドでジョブを実行する。ジョブ制御が有効な場合(set -mの説明を参照)、bgユーティリティはバックグラウンドジョブとして実行することで、現在の環境(Shell Execution Environmentを参照)から中断したジョブを再開します。 job_idで指定されたジョブがすでに実行中のバックグラウンドジョブである場合、bgユーティリティは何の効果もなく、正常終了します。 bgを使用してバックグラウンドにジョブを配置すると、そのプロセスIDがあたかも非同期リストとして開始されたかのように、現在のシェル実行環境でプロセスIDが「知られている」ようになります。非同期リストを参照してください。

ざっくりOPTION

なし

ざっくりOPERANDS

bg job_id

再開するジョブをバックグラウンドジョブとして指定します。 job_idオペランドが指定されていない場合、直前に中断されたジョブが使用されます。 job_idの形式は、XBDのJob Control Job IDに記述されています。

ざっくりまとめ

Linux/Unixを使っていると、プロセスはよく目にすると思います。ジョブはどうでしょうか?
処理に時間がかかっている場合、別のターミナルを開きがちです。(SSHで新しくつなぐ)
みなさんはどうでしょうか?

実際にジョブを使うかは置いておいて、別の機会にジョブについて詳しく調べてみたいと思います。 それでは。

POSIX1日1コマンド[part8]: bc

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

bc

bc

とりあえず使ってみる

  • bcコマンドのインストール
$ sudo yum install bc
  • 実行
$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 

処理が止まっているわけではない。計算式を待ち受けている。
試しに、1+1 を入力してみる。

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+1

すると、

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1+1  <Enter>
2

計算結果が表示される。

  • 標準出力をパイプで渡す。
$ echo "1+1" | bc
2

式をパイプで渡すと計算結果が返ってくる。

ざっくり使い方

bc [-l] [file...]

ざっくりDESCRIPTION

任意精度の算術言語。任意の精度計算機を実現する。 与えられたファイルから入力を受け取り、標準入力から読み込みます。 bcへの標準入力と標準出力が端末にアタッチされている場合、bcの呼び出しは対話型であるとみなされ、以下のセクションで説明される動作上の制約を引き起こす。

ざっくりOPTION

  • -l
    • 数学関数を定義し、デフォルトのゼロの代わりにスケールを20に初期化する。詳しくは EXTENDED DESCRIPTION を参照してください。

ざっくりOPERANDS

bc [file]

bcプログラムステートメントを含むテキストファイルのパス名。すべてのファイルが読み込まれた後、bcは標準入力を読み込みます。 (入力ファイルは、読み込まれたときに実行される一連のコメント、文、および関数定義を含むテキストファイルでなければならない。)

ざっくりEXTENDED DESCRIPTION

このセクションの文法と次のセクションの字句規則は、一緒にbcプログラムの構文を記述します。このスタイルの文法の一般的な規則は、文法規則で説明されています。有効なプログラムは、文法の非終端記号プログラムとして表現することができます。この正式な構文は、テキスト構文の記述よりも優先されます。

EXTENDED DESCRIPTION 詳しくはこちら

ざっくりまとめ

計算できるということがわかりました。が、一朝一夕では習得できる内容じゃなさそうなので、「POSIX1日1コマンド」の中では深く触れれませんでした。

「詳しくはこちら」で済ましている部分はいずれ、"いずれ"習得したいものです。

使いこなせると、POSIXの範囲で複雑な計算ができるようになるので、是非習得したいものです。

POSIX1日1コマンド[part7]: batch

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

batch

batch

とりあえず使ってみる

$ sudo systemctl status atd
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-02-25 23:50:07 UTC; 22s ago
 Main PID: 3314 (atd)
   CGroup: /system.slice/atd.service
           └─3314 /usr/sbin/atd -f

Feb 25 23:50:07 localhost.localdomain systemd[1]: Started Job spooling tools.
Feb 25 23:50:07 localhost.localdomain systemd[1]: Starting Job spooling tools...

起動していなければ、

$ sudo systemctl start atd

・使う

# 事前のディレクトリ確認
$ ls
jobs

# jobの内容を表示
$ cat jobs
echo `date` >> sample.log

# batchコマンドに渡す
$ cat jobs | batch
job 22 at Mon Mar  5 19:03:00 2018

# 実行されている事がわかる
$ ls  
jobs  sample.log

# コマンドの実行結果がsample.logに追記されている。
cat sample.log 
Mon Mar 5 19:03:23 UTC 2018

・複数回キューに追加してみる

# 複数回実行
$ cat jobs | batch
job 33 at Mon Mar  5 19:12:00 2018
$ cat jobs | batch
job 34 at Mon Mar  5 19:12:00 2018
$ cat jobs | batch
job 35 at Mon Mar  5 19:12:00 2018
$ cat jobs | batch
job 36 at Mon Mar  5 19:12:00 2018
$ cat jobs | batch
job 37 at Mon Mar  5 19:12:00 2018
$ cat jobs | batch
job 38 at Mon Mar  5 19:12:00 2018
$ cat jobs | batch
job 39 at Mon Mar  5 19:12:00 2018
$ cat jobs | batch
job 40 at Mon Mar  5 19:12:00 2018

# sample.logを確認
$ cat sample.log 
Mon Mar 5 19:05:53 UTC 2018

この時点では追加されてい無い事がわかる。

# キューの内容内容を確認
# bというキューにたくさんキューがたまっている
$ atq
33 Mon Mar  5 19:12:00 2018 b vagrant
34 Mon Mar  5 19:12:00 2018 b vagrant
35 Mon Mar  5 19:12:00 2018 b vagrant
36 Mon Mar  5 19:12:00 2018 b vagrant
37 Mon Mar  5 19:12:00 2018 b vagrant
38 Mon Mar  5 19:12:00 2018 b vagrant
39 Mon Mar  5 19:12:00 2018 b vagrant
40 Mon Mar  5 19:12:00 2018 b vagrant

# 少し時間を置く
$ atq
35 Mon Mar  5 19:12:00 2018 b vagrant
36 Mon Mar  5 19:12:00 2018 b vagrant
37 Mon Mar  5 19:12:00 2018 b vagrant
38 Mon Mar  5 19:12:00 2018 b vagrant
39 Mon Mar  5 19:12:00 2018 b vagrant
40 Mon Mar  5 19:12:00 2018 b vagrant

少し時間がたってキューの中身が減っているのがわかる。

キュー内のコマンドが実行されたことを意味するので、sample.log にも処理内容が追記されている。

$ cat sample.log 
Mon Mar 5 19:14:53 UTC 2018
Mon Mar 5 19:15:53 UTC 2018
Mon Mar 5 19:16:53 UTC 2018

ざっくり使い方

<command> | batch

ざっくりDESCRIPTION

バッチ・キュー内で実行されるコマンドをスケジュールする。
標準入力からコマンドを読み取り、バッチ・キュー内で実行するようにスケジュールします。それは以下のコマンドと同等です:

at -q b -m now

(atコマンドで 「b」というキュータスクを追加する。) ここで、キューbは特別なキュー、特にバッチ・ジョブ用です。バッチ・ジョブは、時間制約なしでバッチ・キューに提出され、バッチの呼び出しごとに異なる不特定の要因に基づいてアルゴリズムを使用してシステムによって実行されます。

実装定義のディレクトリにあるat.allow(/etc/at.allow)ファイルに名前が表示されている場合、ユーザはバッチを使用することが許可されます。そのファイルが存在しない場合、実装定義のディレクトリにあるat.deny(/etc/at.deny)ファイルをチェックして、ユーザがバッチへのアクセスを拒否されるかどうかを判断しなければなりません。いずれのファイルも存在しない場合、適切な特権を持つプロセスだけがジョブをサブミットすることが許されます。 at.denyだけが存在し、空である場合、グローバルな使用が許可されます。 at.allowファイルとat.denyファイルは、1行に1つのユーザー名で構成されます。

ざっくりOPTION

なし(batchコマンド自体にはなし)

ざっくりOPERANDS

なし(batchコマンド自体にはなし)

ざっくりまとめ

以前に使ってみた、atコマンド の 「負荷が少ないときに処理を実行するバージョン」だそうです。

mokicks.hatenablog.com

Linux の at, batch コマンド

atコマンドをざっくりとしか使ってい無いため、使用感まではわかりませんでしたが、処理に時間がかかり、他の処理を優先させたい場合にbatchを使うのは良いかもしれません。

また、

man batch

を実行すると、atコマンドのmanが表示され、その中の一つの要素としてbatchが存在します。

Go言語_初心者_環境作りからHello Worldまで

Go言語の勉強をそろそろはじめないと、社会の波に乗り遅れそうな気がしてきました。

初心者かつ、仕事であまりプログラミングをしない。
ので、効率よく勉強を進めれるか分かりませんが、とりあえず社会の波に揺られるぐらいにはなりたい。 そして、今回の記事は水辺に片足突っ込むための、

までです。

何から始めるか

Goの事をちょっと調べたら、とりあえず、A Tour of Go から始めようってなりますよね。

とりあえず、A Tour of Go を写経するツアーに参加するのはいかがでしょうか?
私はそうすることにしたいと思います。

それと平行して、環境を用意したいと思います。

環境

自分の環境

手順

  • Goを使えるようにする

    • バイナリをダウンロード
    • 適切なディレクトリに配置
    • .bash_profileにパスを通す記述を追記
  • vim-goを使えるようにする。

    • vim8(vim-enhanced)
    • vim-go
      • vim-goをclone
      • vim-goで使うバイナリをダウンロード

Go本体

バイナリをダウンロード、適切なディレクトリに配置

Downloads - The Go Programming Language このリンクのFeatured downloads から対象マシン(私の場合はLinux)を右クリックしてリンクのアドレスを取得する。そしてインストールする。

curl -LO https://dl.google.com/go/go1.9.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.9.4.linux-amd64.tar.gz
.bash_profileにパスを通す記述を追記
echo "export PATH=$PATH:/usr/local/go/bin" > ~/.bash_profile
source ~.bash_profile
$ go
Go is a tool for managing Go source code.

Usage:

    go command [arguments]

The commands are:

    build       compile packages and dependencies
    clean       remove object files
    doc         show documentation for package or symbol
    env         print Go environment information
    bug         start a bug report
    fix         run go tool fix on packages
    fmt         run gofmt on package sources
    generate    generate Go files by processing source
    get         download and install packages and dependencies
    install     compile and install packages and dependencies
    list        list packages
    run         compile and run Go program
    test        test packages
    tool        run specified go tool
    version     print Go version
    vet         run go tool vet on packages

Use "go help [command]" for more information about a command.
・
・
・

vim-goを使えるようにする。

vim

Vim 8 for CentOS Linux 7 – Karanbir Singh :: Thinkability @karan.org

GitHub - fatih/vim-go: Go development plugin for Vim

これらを参考に、vim8 + vim-go使えるようにする。

$ sudo vim /etc/yum.repos.d/vim8.repo
[mcepl-vim8]
name=Copr repo for vim8 owned by mcepl
baseurl=https://copr-be.cloud.fedoraproject.org/results/mcepl/vim8/epel-7-$basearch/
type=rpm-md
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/mcepl/vim8/pubkey.gpg
repo_gpgcheck=0
enabled=1
enabled_metadata=1
:qw
vimを一度アンインストールし、またインストールする
  • sudoが一度消えますが、またyumでインストールできます。
$ sudo yum remove vim-minimal-2:7.4.160-2.el7.x86_64
# sudoがないのでrootになる
$ su
$ yum install sudo
$ sudo yum install vim
git clone https://github.com/fatih/vim-go.git ~/.vim/pack/plugins/start/vim-go
vim-goでつかうバイナリをダウンロード
$ vim
:GoInstallBinaries

これでダウンロードができるはずです。

Hello World

Goの「Hello World」書く

vim hello.go
package main
  
import "fmt"

func main() {
        fmt.Println("vim-go")
}

vim-goがここまで勝手に書いてくれている。

package main
  
import "fmt"

func main() {
        fmt.Println("Hello World")
}

実行

$ go run hello.go 
Hello World
$ ls
hello.go
$ go build hello.go
$ ls
hello  hello.go
./hello
Hello world

POSIX1日1コマンド[part6]: basename

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

basename

basename

とりあえず使ってみる

$ ls
a.txt
$ basename a.txt 
a.txt
# suffixを指定
$ basename a.txt .txt
a
$ pwd        
/home/vagrant/shells/006
$ basename `pwd`
006
$ ps aux | grep chronyd                                  
chrony     556  0.0  0.3 115640  1776 ?        S    Feb25   0:00 /usr/sbin/chronyd
vagrant   3805  0.0  0.1  12448   676 pts/0    R+   04:05   0:00 grep --color=auto chronyd ps aux | grep chronyd                                  

$ ps aux | grep chronyd | awk '{ print $11 }' | head -n 1
/usr/sbin/chronyd

$ basename $(ps aux | grep chronyd | awk '{ print $11 }' | head -n 1)
chronyd

ざっくり使い方

basename string [suffix]

ざっくりDESCRIPTION

パス名のディレクトリじゃない部分を返す。文字列のオペランドXBD pathname で定義されているパス名として扱われる。 文字列は、文字列中の最後のパス名に対応するファイル名に変換され、その後に接尾辞文字列接尾辞があればそれを削除するものとする。これは、次のステップに相当するアクションを順番に実行することによって行われます。

  1. stringがヌル字列の場合、結果の文字列が '.'かどうかは不明です。もしくは、ヌル文字列です。いずれの場合も、手順2〜6はスキップしてください。
  2. stringが"//"の場合、ステップ3〜6がスキップされるか処理されるかどうかは、実装定義である。
  3. stringが全てスラッシュで構成されている場合、文字列は単一のスラッシュ文字に設定されます。この場合は、手順4〜6をスキップしてください。
  4. stringの最後にスラッシュがある場合、それらは削除される
  5. stringにスラッシュが残っている場合、文字列中の最後のスラッシュまでの文字列の接頭辞は削除されます。
  6. suffixスオペランドが存在し、stringに残っている文字と同一ではなく、stringに残っている文字のsuffixと同じである場合、接尾辞,suffixは文字列から削除されます。それ以外の場合、このステップでは文字列は変更されません。文字列に接尾辞が見つからない場合は、エラーとみなされません。
補足資料

suffix(サフィクス)

ざっくりOPTION

なし

ざっくりOPERANDS

basename <string>
basename <suffix>

ざっくりまとめ

パスを渡すと最後パスの最後の部分を抜き出してくれる。
正直basenameをいつ使うのか思いつきません。
いっぱいパス処理しないといけなくて、かつ拡張子が不必要な場合とかに使えるだろうか。
== 活用方法募集中 ==

POSIX1日1コマンド[part5]: awk

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

awk

awk

とりあえず使ってみる

$ ls -la
total 0
drwxrwxr-x. 2 vagrant vagrant 45 Feb 26 01:55 .
drwxrwxr-x. 5 vagrant vagrant 51 Feb 26 01:53 ..
-rw-rw-r--. 1 vagrant vagrant  0 Feb 26 01:54 a.txt
-rw-rw-r--. 1 vagrant vagrant  0 Feb 26 01:54 b.txt
-rw-rw-r--. 1 vagrant vagrant  0 Feb 26 01:54 c.txt

$ls -la | awk '{ print "owner is " $3 ", filename is "$9 }'

owner is , filename is 
owner is vagrant, filename is .
owner is vagrant, filename is ..
owner is vagrant, filename is a.txt
owner is vagrant, filename is b.txt
owner is vagrant, filename is c.txt

ざっくり使い方

awk [-F sepstring] [-v assignment]... program [argument...]

awk [-F sepstring] -f progfile [-f progfile]... [-v assignment]...
       [argument...]

ざっくりDESCRIPTION

パターンをスキャンし処理するプログラム言語の一つ。テキストデータの処理に特化している。一連のパターンと対応するアクション。パターンと一致する入力が読み取られると、そのパターンに関連付けられたアクションが実行される。

入力は一連のレコードとして認識される。デフォルトでは、レコードは行で、改行で終了します。ですがこれは、RS という組み込み変数を使うと変更することができます。

入力の各レコードは、順番にプログラムの各行と照合される。一致した各行は、関連するアクションを実行しなければならない。
awkは各入力のレコードを一連のフィールドとして解釈する。デフォルトでのフィールどの文字列は、「空白」、「改行」以外の文字です。このデフォルトの「空白」、「改行」という区切り文字は、FS という組み込み変数、もしくは -F オプションで変更できる。

レコードのフィールドは、最初の文字から $1 $2 ... で使えます。
また、$0 はレコード全体を示します。他のフィールドを設定すると $0 の再評価が行われる。$ 0に代入すると、他のすべてのフィールドとNF組み込み変数の値がリセットされる。

ざっくりOPTION

  • -F
    • フィールド区切り文字を定義します。ただし、-F <区切り文字>と-v FS = <区切り文字>の両方が使用されている場合、-F <区切り文字>からのFS割り当てがコマンド行順で処理されるか、最後の-v FS = <区切り文字>の後で処理されるかは不特定です。
  • -f progfile
    • awkプログラムを含むファイルプログラムファイルのパス名を指定します。 ' - 'が指定された場合は、標準入力を示すものとする。このオプションの複数のインスタンスが指定された場合、指定された順序でプログラムファイルとして指定されたファイルの連結は、awkプログラムになります。 awkプログラムは、代わりにコマンドラインで1つの引数として指定することもできます。
  • -v assignment
    • 代入引数が代入オペランドと同じ形式であることを保証しなければならない。指定された変数の割り当ては、BEGINパターン(もしあれば)に関連するアクションを含む、awkプログラムを実行する前に行わなければならない。このオプションの複数の出現を指定することができます。

ざっくりOPERANDS

awk programfile

ざっくりまとめ

awkは行区切りで表示されるデータの一部の値を取得したいときや使いたいときに非常に便利なコマンドですね。-F だけでも覚えておけば、日々の業務を楽にできる可能性があります。

$cat sample.csv
1,dog,200
2,cat,300
3,bird,50
4,cow,400
5,rabbit,200

$cat sample.csv | awk -F ',' '{ print $2 }'
dog
cat
bird
cow
rabbit

2番目のフィールの動物の名前を取得した。

上記例の通り、CSVなど特定の区切り文字が利用されているデータにはもってこいじゃないでしょうか。

そしてawkは奥が深いのでさらに深く知りたい人は、

sed & awkプログラミング 改訂版 (A nutshell handbook)

sed & awkプログラミング 改訂版 (A nutshell handbook)

これを買いましょう。

POSIX1日1コマンド[part4]: at

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

at

at

とりあえず使ってみる

$ sudo yum install at

$ sudo systemctl status atd
● atd.service - Job spooling tools
   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-02-25 23:50:07 UTC; 22s ago
 Main PID: 3314 (atd)
   CGroup: /system.slice/atd.service
           └─3314 /usr/sbin/atd -f

Feb 25 23:50:07 localhost.localdomain systemd[1]: Started Job spooling tools.
Feb 25 23:50:07 localhost.localdomain systemd[1]: Starting Job spooling tools...

起動していなければ、

$ sudo systemctl start atd
$ touch dummy-file1 dummy-file2
$ ls
dummy-file1  dummy-file2

$ echo 'rm dummy-file2' > at_task

$ date
Sun Feb 25 23:56:50 UTC 2018
$ ls
at_task  dummy-file1  dummy-file2

$ at -f at_task 23:58
job 4 at Sun Feb 25 23:58:00 2018

$ date
Sun Feb 25 23:57:21 UTC 2018
$ ls
at_task  dummy-file1  dummy-file2

$ date
Sun Feb 25 23:58:03 UTC 2018
$ ls
at_task  dummy-file1
#dummy-file2が消えている

atで指定した時間にコマンドを実行した。

ざっくりDESCRIPTION

後でコマンドを実行する。標準入力からコマンドを読み取り、後で実行されるat-jobとしてグループ化する。 at-jobは別でのシェルで実行され、制御して無いターミナルのプロセスグループとして分けられる。
環境変数、現在の作業ディレクトリ、ファイル作成マスク、およびatユーティリティが実行されたときに有効になる他のimplementation-definedの実行時間属性は、at-jobが実行されるときに、atユーティリテーは保持され使用されるものとし、実行される。

at-jobがsubmitされると、at_job_idとスケジュールされた時間は、標準エラー出力に書き込まれる。
at_job_idは英数字とピリオドからなる識別子です。
ジョブが特定のジョブを一意に識別するようにスケジュールされている場合、at_job_idはシステムによって割り当てられたものとする。

ざっくり使い方

at [-m] [-f file] [-q queuename] -t time_arg
at -r at_job_id...

ざっくりOPTION

  • -f file

    • 標準入力の代わりに、at-jobのソースとして使用するファイルのパス名を指定する。
  • -l

    • at_job_idが指定されていない場合は、起動するユーザーに対してスケジュールされたすべてのジョブを出力する。 at_job_idsが指定されている場合は、これらのジョブの情報のみを出力する。出力は標準出力に書き込まれます。
  • -m

    • at-jobが実行された後、呼び出し元のユーザーに完了のメールを送信する。at-jobによって生成された標準出力と標準エラーは、他の場所にリダイレクトされ無い限り、同様にユーザーに送られる。
  • -q
  • -r
  • -t

ざっくりOPERANDS

  • at_job_id
    • 前回atユーティティーでジョブをスケジュールしたときに出力された名前
  • timespec
    • 多かったので割愛しますが、実行する時間の設定方法が本家サイトには載っています。

ざっくりまとめ

  • cronで定期実行しているやつの一回バージョン。queをつくれそうな感じかしますね。
  • yumでインストールした。標準では入って無い
  • atd (おそらくat daemon)を起動していないと実行できない。