Unix Shell 스크립트는 crontab을 통해 실행된 후 자체의 모든 추적을 삭제합니다.

Unix Shell 스크립트는 crontab을 통해 실행된 후 자체의 모든 추적을 삭제합니다.

내 질문은 두 부분으로 구성됩니다. 두 부분 모두에 도움을 주셔서 감사합니다.

제공된 정보: - 폴더 A와 폴더 B라는 2개의 폴더가 있다고 가정합니다. - 폴더 A에는 많은 파일이 포함되어 있습니다. - 폴더 B에는 셸 스크립트(code.sh)가 포함되어 있습니다.

파트 A: 스크립트 code.sh는 폴더 A의 모든 파일을 삭제한 후 스크립트 code.sh를 포함한 폴더 B를 삭제해야 합니다.

파트 B: 또한 이는 crontab을 통해 특정 시간에 예약되어야 하는데, 이는 그 자체로는 문제가 되지 않습니다. 그러나 스크립트가 폴더 A의 내용을 삭제한 후에는 파트 A에 설명된 대로 crontab에서 해당 항목을 삭제한 다음 폴더 B 삭제를 진행해야 합니다.

위의 내용이 가능한가요? 그렇다면 누군가 나에게 방법을 알려주거나 적어도 올바른 방향을 알려줄 수 있습니까? 저는 UNIX를 처음 사용하므로 도움을 주시면 대단히 감사하겠습니다.

노트:전체 프로세스 동안 crontab의 스크립트(code.sh)만 수동으로 예약하면 됩니다.

답변1

이 스크립트가 루트로 실행되는 경우... /var/spool/cron/root에서 해당 crontab 줄을 삭제하여 crontab에서 항목을 제거할 수 있습니다. (이것이 무엇 crontab -l이며 crontab -e무엇을 위해 사용되는지입니다).

삭제 명령 끝에 다음 줄을 추가합니다(스크립트 이름을 {pattern}으로 바꿉니다).

sed -i '/{pattern}/d' /var/spool/cron/root

따라서 crontab 실행을 입력하면code.sh좋다

0 21 * * * /etc/cron.daily/code.sh

명령은 다음과 같습니다:

sed -i '/code.sh/d' /var/spool/cron/root

이렇게 하면 루트 crontab 파일에서 "code.sh"가 포함된 줄이 제거됩니다.

위 줄을 스크립트 끝에 추가하여 두 파일을 모두 삭제하고 crontab에서 항목을 제거할 수 있습니다. @Barmar가 말했듯이 두 폴더를 일시적으로 삭제할 수 있습니다.

예, 이것은 매우 오래된 질문이지만 제거에 대한 직접적인 질문입니다.예약 된 일들구체적으로 답변이 필요합니다.

답변2

스크립트에 파일 삭제 권한이 있는 한 전혀 문제가 없습니다. UNIX 기반 시스템에서는 스크립트가 소스 파일을 변경하거나 삭제하는 데 제한이 없습니다. 파일 시스템 구조는 모든 프로세스가 파일을 닫을 때만 파일과 연결된 물리적 저장소가 해제되는 방식으로 처리됩니다(삭제 후 파일은 더 이상 디렉터리 구조에 표시되지 않지만 파일을 가리키는 inode는 그대로 유지됨). 프로세스) 파일 데이터가 이에 액세스할 수 있습니다. 아무도 inode를 기억하지 못하는 경우에만 파일이 손실됩니다.

물론, 스크립트를 읽고 있는 인터프리터가 파일을 닫았다가 다시 열려고 하는 경우는 예외입니다. 강한 타격은 문제가 되지 않습니다.

또한 일회성 작업처럼 보입니다. 를 사용하지 마십시오 crontab. at또는 심지어 sleep amount && ./script이것이 일반적으로 이 작업을 수행하는 빠르고 더러운 방법입니다(그러나 컴퓨터가 다시 시작되거나 터미널이 닫히면 작동하지 않습니다).

관련 정보