at
コマンドが使用されているコードを研究していました。周りを見回してみると、バッチジョブの実行に使用されていることがわかりました。ジョブのスケジュールに使用されます。入力として、コマンドと、相対または絶対時間を指定します。
それで、私の最初の質問は、なぜat
コマンドが使用されるのですか?どのような状況でat
を使用する必要がありますか?ソフトウェアをアンインストールしようとしているbashスクリプトコードがあり、バックグラウンドサービスを再起動する必要があったときに、この問題に遭遇しました。
2番目の質問:コマンドをバッチジョブとして実行することと、コマンドを直接(またはサブシェルで)呼び出すときにコマンドを実行することの違いは何ですか?
ベルンハルトの返答は正しいです。マルチユーザーシステムでは、重いプログラムを夜のある神秘的な時間に実行できる機能は、ジョブを送信する人と同僚の両方にとって特に便利です。それは「ニースをする」の一部です。
私は私の博士号のほとんどをしました。このように計算し、スクリプトをNiceコマンドと組み合わせて、他の人がマシンをビジー状態にしていたときに常に私の作業の優先順位を下げ、すべてのシステムリソースを独占する機能をそのままにしました。夜に。
まったく同じコマンドを使用して、プログラムが実行されているかどうかを確認し、必要に応じて再起動しました。
また、atはscreen、tmuxなどの前に書かれたため、シェルを切り離す簡単な方法、つまり、システムからログオフするとシェルが死ぬことはありません。
最後に、これも古くからあるcronとは異なることに注意してください。違いは、時々である一方で、cronは非常に繰り返しが多いため、固定間隔で永久に永久に実行する必要があるシステムジョブにより適しているということです。実際、atは、環境変数の独自の設定(および選択)を使用して独自の環境を提供し、cronは環境変数の最小セットを使用します([〜#〜]パス[〜#〜]、例として)。
コンピューターの背後にいない夜間に実行したいデータに対して重い処理を行う必要がある場合は、at
コマンドを使用します。もちろん、帰ったらすぐに始められますが、これは忘れがちです。
コマンドの結果は、スクリプトまたはコマンドの定期的な実行と同じです。
このような質問がある場合は、常にmanページを参照してください。彼らは非常に啓発することができます。
manページからの抜粋
NAME
at, batch, atq, atrm - queue, examine or delete jobs for later execution
DESCRIPTION
at and batch read commands from standard input or a specified file
which are to be executed at a later time, using /bin/sh.
ツールの使用法:
Usage: at [-V] [-q x] [-f file] [-mldbv] timespec ...
at [-V] [-q x] [-f file] [-mldbv] -t time
at -c job ...
atq [-V] [-q x]
atrm [-V] job ...
batch
at
には4つのコマンド(at
、atq
、atrm
、およびbatch
)が含まれています。 at
とbatch
を使用してジョブをスケジュールし、atq
を使用して何がスケジュールされているかを確認し、atrm
を使用して実行前にジョブを削除します。
$ at -f <cmd> timspec
at
ジョブを実行する時間は、さまざまな方法で指定できます。
manページの抜粋フォーム
Atでは、POSIX.2標準を拡張して、かなり複雑な時間指定が可能です。 HH:MM形式の時刻を受け入れて、特定の時刻にジョブを実行します。 (その時刻がすでに過ぎている場合は、翌日と見なされます。)真夜中、正午、またはティータイム(4pm)を指定することもでき、時刻の後にAMまたはPM朝または夕方に実行する場合。ジョブを実行する曜日を指定することもできます。月の名前の形式で日付を指定し、オプションで年を指定するか、MMDD形式の日付を指定することもできます[ CC] YY、MM/DD/[CC] YY、DD.MM。[CC] YYまたは[CC] YY-MM-DD。日付の指定は、時刻の指定に従っている必要があります。 nowのような時間+時間単位をカウントします。時間単位は分、時間、日、週のいずれかであり、今日に時間のサフィックスを付けて今日のジョブを実行し、時間のサフィックスを付けて明日のジョブを実行するように指示できます明日で。
このシェルスクリプトがあるとします。
$ cat mycrontest.sh
#!/bin/bash
echo "It is now $(date +%T) on $(date +%A)"
サンプルの実行:
$ ./mycrontest.sh
It is now 18:37:42 on Friday
ジョブ投入時のサンプル:
$ at -f mycrontest.sh 10pm tomorrow
job 14 at Sun Jul 8 22:00:00 2007
$ at -f mycrontest.sh 2:00 tuesday
job 15 at Tue Jul 10 02:00:00 2007
$ at -f mycrontest.sh 2:00 july 11
job 16 at Wed Jul 11 02:00:00 2007
$ at -f mycrontest.sh 2:00 next week
job 17 at Sat Jul 14 02:00:00 2007
ネットワーク管理者から、午後7時から午前2時までにWebサーバーのメンテナンスが行われることが通知されました。事前にメンテナンス通知を提供し、システムの稼働時間を最大にしたいとします。徹夜して、さまざまなコマンドを実行する準備をして、後でもう一度起動しますか?いいえ、at
を使用してこれらのタスクをスケジュールしてから、就寝/ Skyrimをプレイしてそれを忘れます。
UNIX、Linuxの3つのコマンド(at、batch、またはcron)のいずれかを使用して、バッチジョブを実行できます。
特定の日時を使用してatジョブをスケジュールする
Syntax:
$ at time date
For example, to schedule a job at 11 am on May 20, use the following at command.
$ at 11 am may 20
at
は、リマインダーを起動する非常に便利な方法にもなります。私の現在の開発マシンはOSXを実行しているので、at
とシンプルなnotify.bash
私が一緒に石畳を作ったことは本当に役に立ちます:
$ at 5pm
notify.bash -t 'Work is over' -m "Don't forget to rollback INT environment"
^D
$ at now + 15 minutes
notify.bash -m 'Check tests' -l 'http://integration.example.com/jobs/XXXX'
^D
$ at now + 10 minutes
notify.bash -m 'Check the fridge, pudding should be done!'
^D
notify.bash
#!/bin/bash
DEFAULT_TITLE='Hey! Listen!'
TITLE="$DEFAULT_TITLE"
LINK=
MESSAGE=
function args.help () {
local error="$1"
if [ "$error" ]; then
echo >&2 "$error"
fi
cat >&2 <<EOF
Usage $0 <options>
Displays a message using an Applescript notification box
Options
-------
--title <text> Sets the title, otherwise the default is used ("$DEFAULT_TITLE")
-t <text> Alias for --title
--link <url> Add a button to open a link
-l <url> Alias for --link
--body <text> Set the message body
-m <text> Alias for --body
EOF
}
function args.verify-not-empty () {
local value="$1"
local varname="$2"
if [ "$value" ]; then
echo "$value"
Elif [ "$varname" ]; then
args.help "$varname cannot handle an empty argument"
exit 1
else
args.help \
"The programmer forgot to include context, something was empty which shouldn't have been, but I can't tell you much more than that. Sorry :("
exit 1
fi
}
function args.parse () {
while [ "$1" ]
do
case "$1" in
'-t' | '--title')
shift
TITLE=$(args.verify-not-empty "$1" title)
shift
;;
'-l' | '--link')
shift
LINK=$(args.verify-not-empty "$1" link)
shift
;;
'-m' | '--body')
shift
if [[ "$1" = '-' ]]; then
MESSAGE=$(cat -)
else
MESSAGE="$1"
fi
MESSAGE=$(args.verify-not-empty "$MESSAGE" body)
shift
;;
*)
args.help "Unrecognized argument: $1"
exit 1
esac
done
if [[ ! "$MESSAGE" ]]; then
args.help "Message body was not specified"
exit 1
fi
}
function message.display-no-link () {
osascript > /dev/null <<EOF
tell application "Finder"
activate
display alert "$TITLE" ¬
message "$MESSAGE" ¬
buttons { "Acknowledge" } ¬
default button "Acknowledge"
end tell
return
EOF
}
function message.display-with-link () {
osascript > /dev/null <<EOF
tell application "Finder"
activate
display alert "$TITLE" ¬
message "$MESSAGE\n\nClick 'Open Link' to go to $LINK" ¬
buttons { "Acknowledge", "Open Link" } ¬
default button "Open Link"
set response to button returned of the result
if response is "Open Link" then open location "$LINK"
end tell
return
EOF
}
function message.display () {
if [ "$LINK" ]; then
message.display-with-link
else
message.display-no-link
fi
}
args.parse "$@"
message.display