macOS (10.11)에서 종료 스크립트를 만들려고합니다 . 즉, Mac을 종료하는 스크립트가 아니라 종료시 실행 되는 스크립트입니다. Linux "rc"시스템은 macOS에 없습니다.
솔루션을 검색하고 검색했으며 이것이 내가 찾은 유일한 방법입니다. 시작시 부팅시 시작되며 시작 및 종료 기능은 다음과 같은 경우에 실행됩니다.
#!/bin/bash
function startup()
{
## commands to create and fill ram disk
tail -f /dev/null &
wait $!
}
function shutdown()
{
## commands to backup contents of ramdisk
exit 0
}
trap shutdown SIGTERM
startup;
내가 말했듯이 startup () 및 shutdown () 함수는 모두 예상대로 실행됩니다. 문제는 종료 기능의 명령 내에 있습니다. 그것은 매우 간단한 스크립트이며 램 디스크의 내용을 하드 드라이브의 폴더에 복사합니다.
function backup_ramdisk()
{
## empty ram disk backup folder
rm -R -f /webfolder-backup/*
## copy contents of the ramdisk to the ramdisk backup
cp -R /Volumes/webfolder/ /webfolder-backup/
## make me the owner
chown -R me /webfolder-backup/
chmod -R 777 /webfolder-backup/
exit 0
}
실제 스크립트에는 내용을 기록하는 추가 기능이로드되어 전체 스크립트가 실행되는지 확인할 수 있습니다. 그러나 일어나는 일은 cp
라인이 실패하는 것입니다. 때때로 완전히 실패하고 백업 폴더가 비어 있습니다. 그러나 더 자주 RAM 디스크 구조의 일부를 가져 와서 정확히 동일한 지점에서 (그러나 정확히는 아니지만) 파일 복사를 중지합니다.
cp: /Volumes/webfolder/: No such file or directory
해당 폴더에서 이미 100 개의 항목을 복사 한 경우에도 종종 오류가 발생 합니다. 스크립트가 백업을 완료하기 전에 shutdown 명령이 RAM 디스크를 마운트 해제하고 있다고 생각합니다. RAM 디스크이므로 모든 파일을 복사하는 데 몇 초 밖에 걸리지 않습니다. 그러나 충분하지 않은 것 같습니다. 스크립트가 실행되는 동안 종료 프로세스를 일시 중지 할 수있는 방법이 있다면 계속 진행하십시오. 아니면 이것에 대한 더 나은 접근 방식입니까?
tail -f /dev/null &
을 바꾸고 tail -f /Volumes/webfolder/.handle
물론 RAM 디스크에 .handle이라는 보이지 않는 파일을 만들었습니다. RAM 디스크에서 파일을 여는 꼬리는 파일을 열어두고 스크립트가 종료 될 때까지 램 디스크를 꺼낼 수없는 상태로 유지합니다. 작동하지 않지만 도움이됩니다. cp
줄 과 함께 더 많은 파일을 일관되게 복사하고 있습니다. 그러나 그들 모두는 아닙니다. 따라서 올바른 방향으로 향할 수 있습니다. RAM 디스크를 몇 초 동안 계속 열어 두어야합니다.