저는 Linux 서버에서 작업 중인데 이를 사용할 수 없습니다 cron
. 따라서 이 문제를 해결하기 위해 다음과 같이 특정 시간에 실행해야 하는 스크립트를 작성했습니다.
while true
do
...
...
sleep 1d #changes upon requirement of my script
done
나는 항상 백그라운드에서 스크립트를 시작합니다 nohup ./script.sh &
.
내 문제는 서버에서 이러한 스크립트 중 6/7개가 실행되고 있다고 가정해 보겠습니다. 대부분의 시간은 자고 있습니다. 이것이 sleep
일종의 메모리를 소비합니까? 서버 성능에 영향을 미치나요? 이 문제를 해결하는 효과적인 방법이 있습니까?
답변1
예 - 이 스크립트는 메모리를 소비하고 있습니다. 실제로 메모리를 사용하여 실행되는 두 개의 프로세스가 있습니다.
- 쉘(예: bash)
sleep
그 자체.
sleep
매우 가벼워지지만 셸은 몇 메가바이트의 메모리를 소비할 수 있습니다. 내 시스템에서 유휴 비대화형 bash는 약 1MiB를 소비하고 절전 모드는 0.7MiB를 소비합니다. (RSS 열을 보면) 확인할 수 있습니다 . ps
비록 top
이들 중 상당수는 실제로 이를 사용하는 모든 프로세스 간에 공유되는 라이브러리와 같은 것입니다. 대체로 각각 1MiB 미만일 것입니다.
Linux에서는 여기에서 관심 있는 내용 /proc/pid/status
(및 )을 통해 /proc/pid/smaps
자세한 내용을 얻을 수 있습니다. Vm*
예를 들어:
bash -c 'grep Vm /proc/$$/status'
VmPeak: 13380 kB
VmSize: 13380 kB
VmLck: 0 kB
VmPin: 0 kB
VmHWM: 972 kB
VmRSS: 972 kB
VmData: 220 kB
VmStk: 132 kB
VmExe: 208 kB
VmLib: 2320 kB
VmPTE: 48 kB
VmPMD: 12 kB
VmSwap: 0 kB
총 RSS(사용된 RAM 양)는 972kB이며, 그 중 220kB는 "데이터"(일반적으로 공유되지 않음)이고 132kB는 스택(또한 공유되지 않음)임을 알 수 있습니다. 따라서 각각의 추가 bash 실행은 매우 작습니다.
몇개의 충고: 이렇게 여러 가지 해결 방법을 수행해야 한다면... cron을 사용할 수 없는 이유는 무엇입니까? 이는 예상치 못한 오류가 발생할 가능성이 적은 더 간단하고 깔끔한 접근 방식입니다(빠릅니다! sleep 1d
일광 절약 시간제 변경을 처리하는 방법은 무엇입니까? 재부팅/종료의 일부로 SIGTERM 신호를 보내기 때문에 절전 모드가 일찍 돌아오면 어떻게 됩니까? ). 시스템 관리자가 승인되지 않은 사람이 cron 작업을 예약하는 것에 대해 우려하고 있다면 해당 사람 /etc/cron.allow
이 /etc/cron.deny
crontab(1)에 로그인되어 있음 을 알려 주십시오 .
답변2
sleep
리소스를 거의 소모하지 않도록 설계되었습니다.
sleep
하지만 여러 가지 이유로 프로세스가 중단될 수 있다는 점을 참고하시기 바랍니다 . 예상보다 일찍 명령을 실행하지 않도록 할 수도 있습니다.