나는 작은 스크립트(기본적으로 매우 간단하며 내가 작성한 첫 번째 스크립트)를 가지고 있으며 경과 시간과 완료하는 데 걸린 시간을 알고 싶습니다.
두 변수의 차이를 계산하는 것이 가능합니까? ($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-get
pihole
command -v pihole
command -v apt-get
또한 -line이 파일의 첫 번째 줄인지 확인하세요 #!
(예제에서 본 것처럼). 질문의 코드는 이를 수행하지 않습니다. 참고하세요 - #!
네완전히 무시됨스크립트를 호출할 때 명령줄에서 명시적 해석기를 사용하는 경우.