초당 100회 미만으로 보장되는 초당 여러 번 카운터를 증가시키는 간단한 bash 스크립트가 있습니다. 스크립트는 제대로 작동하지만 컴퓨터 충돌 시에도 카운터가 지속되기를 원합니다.
SSD 전용 시스템에서 카운터를 보존하는 가장 좋은 방법은 무엇입니까? /var/<app>/
업데이트할 때마다 어딘가에 에코해야 합니까 (예: 파일에 저장해야 합니까?) 그렇다면 /var/<app>/
그 곳이 맞는 걸까? 이 단일 값을 추적하려면 전체 데이터베이스를 설치해야 합니까? 이 작업을 효율적으로 수행할 수 있는 귀엽고 작은 Linux 기능이 있습니까?
명확히 하자면, 내 문제는 별도의 스크립트 실행 사이에 카운터가 일정하게 유지되는지 확인하는 것이 아니었으며 이미 해당 문제를 해결했습니다. 제가 걱정하는 것은 컴퓨터 충돌로 인해 시스템이 갑자기 예기치 않게 실패하는 경우입니다(그래서 trap
쉘 스크립트에 의존할 수 없습니다).
답변1
단순히 파일에 값을 저장하는 것을 고려해 보셨나요? 이를 위해 데이터베이스 대신 파일을 사용할 수 있습니다. 다만 초당 100번씩 파일을 읽는 것과 스크립트의 경쟁 조건이 걱정됩니다. 하지만 다음을 사용할 수 있습니다.
실행 1:
var=2
echo $var > foo.txt
실행 2:
var=$(head -n 1 foo.txt)
echo $var # 2
sed
더 복잡한 처리에도 사용할 수 있습니다 . 또한 스크립트가 순차적인 경우 간단히 파일에 추가 >>
하고 각 실행의 마지막 줄을 읽어( 를 사용하여 tail
) 잠금 문제를 해결할 수 있습니다. 하지만 가능하다면 스크립트를 100번 호출하는 대신 for 루프에서 스크립트를 실행하는 것이 더 나은 디자인이 될 수 있다고 생각합니다.
답변2
특정 상황(예: EXIT, TERM)에서는 변수에 저장하고 파일에 쓰는 것이 좋습니다. trap
프로세스에서 수신한 신호를 기반으로 명령을 실행할 수 있습니다 .
예제는 다음 위치에 있습니다.트랩 명령
답변3
가장 좋은 방법은 특정 상황(예: on)에 카운터의 마지막 값을 파일에 저장하는 것입니다 EXIT
. 이는 내장 옵션을 사용하는 것보다 간단합니다. 그런 다음 스크립트에 파일 경로를 포함하고 값을 가져와 스크립트가 다시 시작될 때 복원할 수 있습니다.
트랩을 사용하여 프로세스에서 수신한 신호를 기반으로 명령을 실행할 수 있습니다.