경과 시간 카운트

경과 시간 카운트

나는 작은 스크립트(기본적으로 매우 간단하며 내가 작성한 첫 번째 스크립트)를 가지고 있으며 경과 시간과 완료하는 데 걸린 시간을 알고 싶습니다.

두 변수의 차이를 계산하는 것이 가능합니까? ($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을 사용하여 루트 사용자를 수정합니다 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이 파일의 첫 번째 줄인지 확인하세요 #!(예제에서 본 것처럼). 질문의 코드는 이를 수행하지 않습니다. 참고하세요 - #!완전히 무시됨스크립트를 호출할 때 명령줄에서 명시적 해석기를 사용하는 경우.

관련 정보