使用して、Linux上でタイマーを設定するにsystemd
HTTPS:// linux.cn/article-10182-1.html
あなたのゲームサーバーを起動するためのタイマーを作成するためにsystemdを使用することを学びます。
前に、私たちはどのように見て、マニュアル、ブートおよびシャットダウン時に、デバイスが有効になっている、ファイルシステムが変更される にsystemdサービスを有効および無効にします。
タイマーは......時間に基づいて、サービスを開始する別の方法を追加します。定期的なタスクに非常に似ていますが、systemdにタイマーやや柔軟なものの。のは、それがどのように動作するかを見てみましょう。
「時限ファイル名を指定して実行」
レッツは拡大し、この直列の2回の記事では、あなたの設定 Minetestの タイマーユニットを使用する方法の最初の例としてのサーバを。あなたはそれらの記事を読んでいない場合、あなたは今行くと見ることができます。
あなたは、サーバー上のゲームサーバ1分後の開始を作る、タイマーMinetestサーバーを作成する代わりに、すぐに実行することで、「改善」されます。スタートは他のプレイヤーにそれらを伝える電子メールなどの他のサービスを、使用することがあります前に、これがあってもよい理由は、あなたがあなたが開始する前に(ネットワーク等)の他のサービスが完全に稼働していることをしたい、プレーする準備ができました。
結局、あなた minetest.timer
のユニットは次のようになります。
# minetest.timer
[Unit]
Description=Runs the minetest.service 1 minute after boot up
[Timer]
OnBootSec=1 m
Unit=minetest.service
[Install]
WantedBy=basic.target
また、難しいことではありません。
一般的に従来のように、初めである [Unit]
との情報単位の一部の役割はここで何も新しいことを説明していません。[Timer]
このセクションでは、浮上しているが、その役割は自明である:サービス、サービスを開始するかについての情報を起動する際には含まれています。この例では、OnBootSec
システムアップとsystemdにサービスを実行した後に命令を伝えるために。
その他のコマンドは次のとおりです。
OnActiveSec=
タイマーが開始された後にサービスを実行するためにどのくらいsystemdに知らせます。OnStartupSec=
同じことは、それがプロセスを開始した後、長期的にはsystemdにサービスをsystemdにどのように伝えます。OnUnitActiveSec=
最後のサービスは、タイマーがスタートすることによって活性化するので、サービスを実行するためにどのくらいsystemdに知らせます。OnUnitInactiveSec=
タイマーによって活性化され、最後のサービスが無効になっているため、サービスを実行するためにどのくらいsystemdに知らせます。
続行 minetest.timer
ユニット、basic.target
一般的に同期ポイントのガイドポストサービス下旬ブートサービスの同期ポイントとして使用します。それが可能にすることが、この手段 minetest.timer
ローカルのインストールにマウントポイントをローカル後に実行されているユニットは、点またはスイッチング機器、ソケット、タイマ、およびその他の基本的な経路単位の初期化処理をマウント。以下のようにsystemdユニットにおける第二の記事、説明したtargets
だけで同じ古い実行レベルの旧レベルのように実行した後に、コンピュータがこのような状態に置くことができる、またはあなたのサービスを伝えるためには、一定の状態に達します実行を開始。
コンフィギュレーションの最初の二つの記事で minetest.service
ファイル最終的に次のようになります。
# minetest.service
[Unit]
Description= Minetest server
Documentation= https://wiki.minetest.net/Main_Page
[Service]
Type= simple
User=
ExecStart= /usr/games/minetest --server
ExecStartPost= /home//bin/mtsendmail.sh "Ready to rumble?" "Minetest Starting up"
TimeoutStopSec= 180
ExecStop= /home//bin/mtsendmail.sh "Off to bed. Nightie night!" "Minetest Stopping in 2 minutes"
ExecStop= /bin/sleep 120
ExecStop= /bin/kill -2 $MAINPID
[Install]
WantedBy= multi-user.target
ここでは変更する必要はありません。しかし、あなたがする必要がある mtsendmail.sh
から(メールスクリプトを送信します):
#!/bin/bash
# mtsendmail
sleep 20
echo $1 | mutt -F /home/<username>/.muttrc -s "$2" my_minetest@mailing_list.com
sleep 10
読みます:
#!/bin/bash
# mtsendmail.sh
echo $1 | mutt -F /home/paul/.muttrc -s "$2" pbrown@mykolab.com
あなたはそれらの悪いbashスクリプトの一時停止を取り除くされます。今何を待つにsystemd。
それ稼働
すべてが無効になって、正常に動作していることを確認します minetest.service
。
sudo systemctl disable minetest
これは、あなたがそれを一緒に起動したときに起動しないシステムを作る;そして、逆に、使用可能 minetest.timer
:
sudo systemctl enable minetest.timer
今、あなたは、サーバーを再起動することができ、そして時に実行 sudo journalctl -u minetest.*
した後、次のように表示されます minetest.timer
ユニットを行う後分ほどminetest.service
ユニットが実行を開始します。
図1:1分minetest.serviceの開始についてminetest.timer実行実行しています
時間の問題
minetest.timer
開始時刻は9時08分33秒にsystemdのためにログに表示される minetest.service
開始時間は午前九時09分18秒、いくつかのポイントを説明するために、この問題の必要性について、それらの間の1分未満である:まず、覚えている我々彼は言った OnBootSec=
命令は、サービスが起動が完了した後に開始した時点からカウントされます。とき minetest.timer
時が来れば、ガイドが前に数秒で完了しました。
自分自身を設定するためのもう一つは、物事を実行するエラーのエラーマージン(デフォルトは1分)のマージンをsystemdに。1分間の割り当てによって、systemdにオフにいくつかのプロセスを待つことができます。これは、同時に実行しているより多くのリソースを大量に消費するプロセスのリソースを大量に消費するプロセスは、負荷を分散できます。また、これはことを意味し minetest.service
、ガイドの後に1〜2分の間に開始が完了しました。しかし、誰も正確な時刻を知ることはありません。
ところで、あなたは使用することができます AccuracySec=
コマンドを誤差の範囲を変更します。
また、システム上のタイマー実行中のすべてまたは最後の実行時間を確認することができます。
systemctl list-timers --all
図2:時間が実行されているタイマまたはの最後の実行を確認します
行うには最後に一つは、あなたが時間を表すためのフォーマットを使用すべきかを考えることです。この点でシステムDは、非常に柔軟である:2 h
、2 hours
または 2hr
二時間を表すために使用することができます。「秒」のために、あなたが使用することができ seconds
、second
、sec
と s
。「ミニッツの」と同じであるminutes
:ところでminute
、min
及び m
。あなたは確認することができます man systemd.time
systemdには、すべての時間の単位を理解することができます参照してください。
次回
次回は、あなたが定期的にサービスを実行するために、カレンダーの日付と時刻を使用する方法を参照してくださいよ、とどのようにプラグインするための操作いくつかのハードウェア・サービスをタイマーおよびデバイスユニットを組み合わせて。
後でお会いしましょう!
Linux Foundationのと無料のコースによるEDX上 の「Linux入門」 のLinuxについての詳細を学ぶために。