経過時間カウント

経過時間カウント

私は小さなスクリプト(基本的に非常に簡単で、私が書いた最初のスクリプト)を持っており、経過時間と完了にかかった時間を知りたいです。

2つの変数の違いを計算することは可能ですか? ($SSSと$EEE)、$SECONDSも試してみましたが、結果は0でした。

別の方法があるかもしれませんが、この問題をどのように解決するのですか?

私のスクリプト:

echo "****************************************************************************"
SECONDS=0
#!/bin/bash
SSS=$(date '+%Y.%m.%d. @ %H:%M:%S')
echo "Start time: ${SSS}"
echo ""
echo "Starting update and upgrade"
echo "==================================="
sudo apt-get update && sudo apt-get upgrade -y
echo ""
echo "Starting autoremove"
echo "==================================="
sudo apt-get autoremove -y
echo ""
echo "Starting autoclean"
echo "==================================="
sudo apt-get autoclean -y
echo ""
echo "Check for Pi-Hole update"
echo "==================================="
sudo pihole -up
echo ""
echo "Starting gravity update for Pi-Hole"
echo "==================================="
sudo pihole -g
echo ""
EEE=$(date '+%Y.%m.%d. @ %H:%M:%S')
echo "Start time: ${SSS}"
echo "End   time: ${EEE}"
duration=$SECONDS
echo "Elapsed time $(($duration / 60)) minutes and $(($duration % 60)) seconds."
echo "****************************************************************************"

ベストアンサー1

スクリプトの問題はコマンドのタイミングとは関係ありません。スクリプトの問題は、コマンドラインで実行されている環境とは異なる環境で実行されていることです。

たとえば、PATH変数が異なるため、一部のユーティリティが見つからない場合や、スクリプトが非対話型環境で実行されていると明らかに実行できない対話型要素がスクリプトに存在する可能性があります。

あなたも言及しました。コメントからsh起動スクリプトの代わりに使用しますbash。これは、変数が存在しない可能性があることを意味します(実行シェルによって異なりますSECONDS)。sh

スクリプトがほとんど使用されていることがわかるので、sudo権限のないユーザーアカウントのcrontabではなく、ルート自体のcrontabでスクリプトを実行する必要があることを示唆しています(sudoスクリプトからすべての呼び出しを削除します)。 crontabを使用してrootユーザーを変更しますsudo crontab -e

PATHまた、使用するすべてのユーティリティを見つけるために、スクリプトの変数がディレクトリリストに設定されていることを確認してください。例えば、

#!/bin/bash

PATH=/bin:/usr/bin:/usr/local/bin:$PATH

SECONDS=0

apt-get update && apt-get upgrade

# etc.

PATH特に、変数がそのディレクトリに含まれていることを確認する必要があります(コマンドラインでこれらのディレクトリを使用して検索します)。apt-getpiholecommand -v piholecommand -v apt-get

また、-lineがファイルの最初の行であることを確認してください#!(例で見たように)。質問のコードはこれを行いません。注意してください -#!はい完全に無視されるスクリプトを呼び出すときにコマンドラインで明示的なソルバーを使用する場合。

おすすめ記事