web-dev-qa-db-ja.com

コマンドを実行して出力をメールで送信する

私はbashスクリプトを初めて使用します。 CentOSサーバーがあります。次のような非常に単純なコマンドを実行したいと思います。

service lfd status

次に、その出力をメールで送信します。誰かがこれを手伝ってくれませんか?最終的にこれは私がやりたかったことです:lfd.shのようなbashスクリプトを作成し、そのbashスクリプトを1時間ごとに実行します。したがって、そのbashスクリプトを実行すると、このコマンド「service lfd status」が実行され、出力が電子メールで送信されます。

3
KSmith08

他の回答と他の回答に対するOPのコメントに基づいて、私は回答を提案できると思います。

1.コマンドを実行して、その出力を電子メールで送信します。 Linuxでメールを送信するには、いくつかのオプションがあります。コマンドが実行する前に、実際にメールを送信できることを確認する必要があります。 mailやmailxなどのプログラムを使用します。

Sudo yum install mailx

Mailxプログラムを構成する詳細な手順については、こちらの指示に従ってください https://www.digitalocean.com/community/tutorials/how-to-send-e-mail-alerts-on-a-centos-vps -for-system-monitoring

pythonまたは任意のプログラミング言語を使用することもできますが、ここでは簡単にするために、これを差し控えておきます。

2. mailocがdigitaloceanの指示に基づいてセットアップされると、次のようなメールを送信できるようになります。

echo "Your message" | mail -s "Message Subject" email@address

そのメールを受け取ったら、完璧です!次のパートの準備ができました。ファイルlfd.shを作成します。

#!/bin/bash

service lfd status | mail -s "LFD Status" [email protected]

電子メールでサービスのlfdステータスの出力を取得するには、これですべてです。それを実行したい場合は、実行して実行可能にしてください

chmod +x ./lfd.sh

これでメールが送信されますが、まだ完了していません。また、毎時間自動的にメールを送信するようにしたいとのことです。これはcrontabで行うことができます。

Crontab/Cronは、Linuxで非常に便利な自動タスクスケジューラです。 lfd.shでCronジョブを作成する必要があります

this のようなWebサイトは、Cronジョブの構文を思い出すのに役立ちます。

crontab -e
0 * * * * /home/username/lfd.sh

これにより、毎月1回、毎時1時間、毎日、毎週ジョブが実行されます。詳細については、CronリンクまたはGoogle Cronの例をご覧ください。

3
Brandon Zappy

これを試してください:

ssh -t [email protected] ' touch /tmp/servicestatus.txt ; service lfd status > /tmp/servicestatus.txt ; mutt -s "Service Status" [email protected] < /tmp/servicestatus.txt '

現在:

-t擬似端末を開く

touchコマンドを使用してファイルを作成します。Sshの疑似端末では作成されないようです。

「」は「 `」とは異なることに注意してください。

そして、はい、Sshはif/then/elseステートメントで機能します。

出力ではなくエラー出力が必要な場合は、2>の代わりに>service lfd status 2> /tmp/servicestatus.txtとして使用します

2
Vasconcelos1914