누군가가 나를 올바른 방향으로 가리킬 수 있기를 바랍니다. 디렉터리에서 새 파일(오늘 날짜가 포함된 파일)을 확인한 다음 결과를 텍스트 파일로 인쇄하는 스크립트를 만들고 싶습니다. cron
또는 을 사용할 수 있나요 bash
?
편집: 원본 스레드를 업데이트했습니다. Linux Mint VM에서 다음을 시도했는데 성공적으로 작동했습니다. 유일한 문제는 다음과 같습니다.
1) 새 파일을 만들 때("sudo vi newtextfile.txt"를 사용한 다음 ":w" 사용) 알림 이메일을 받습니다.4 번.
2) 위에서 언급한 방법을 사용하여 새 파일을 생성하여 여러 IN_CREATE 이벤트를 트리거합니까?
/xyz/jon >>>
total 12
786436 drwxr-xr-x 2 root root 4096 Jul 13 20:43 .
786434 drwxr-xr-x 4 root root 4096 Jul 13 19:45 ..
786441 -rwxr-xr-x 1 root root 48 Jul 13 20:32 mylogger.sh
786437 -rw-r--r-- 1 root root 0 Jul 13 20:22 mylogtoday.txt
"incron.table-jonincron" >>>
/xyz/client IN_CREATE /xyz/jon/mylogger.sh
/xyz/jon/mylogger.sh >>>
sudo mail -s "testing script" [email protected]
답변1
안녕하세요. 좀 더 숙련된 분이 답변해주셨으면 좋겠습니다. HP-UX에는 상당히 오래된 System V 도구 상자가 있으므로 최신 GNU 도구는 없습니다.
HP-UX posix 쉘, /usr/bin/sh
매우 가깝습니다.크쉬 93. 따라서 두 파일의 수명을 비교하고 [[ file1 -nt file2 ]]
값을 반환 할 수 있습니다.진짜file1
새로운 것 보다 file2
. HP-UX에서는 사용 하지 마십시오 /usr/bin/ksh
. 매우 오래된 표준 korn-shell(1982년 것으로 추정)입니다.
이는 주기적으로 실행할 수 있는 간단한 스크립트입니다. 이름에 특수 문자가 포함된 파일과 기타 가능한 버그를 지원하려면 더 강화되어야 하는데, 저는 그게 잘 안 됩니다.
모니터링되는 파일은 DIR에 있으며 새 파일 목록은 /tmp/newfile입니다. 이 목록은 DIR의 모든 파일을 마지막 실행 중에 발견된 최신 파일과 비교할 때 생성되므로 런타임 시 새 파일 생성을 지원합니다. 스크립트는 여러 동시 실행을 지원하지 않으므로 잠금을 구현하거나 각 실행에 충분한 시간을 허용해야 할 수도 있습니다.
#!/usr/bin/sh
previous=/tmp/previous
new=/tmp/newfiles
DIR=/tmp/aa
if [[ ! -s $new ]]
then
mv "$new" "$previous"
fi
if [[ ! -f "$previous" ]]
then
ls -rt "$DIR" > "$new"
exit
fi
ref=$(tail -1 "$previous")
if ! cd "$DIR"
then
echo cannot cd "$DIR"
exit 1
fi
ls -rt | while read file
do
if [[ "$file" -nt "$ref" ]]
then
echo "$file"
fi
done > "$new"
당신은 그것을 실행할 수 있습니다예약 된 일들, 예를 들어:
5분마다 한 번씩(hp-ux crontab은 *5 구문을 지원하지 않음)
0,5,10,15,20,25,30,35,40,45,55 * * * * /myscript.sh >>/var/adm/myscript.log 2>&1
매시간
0 * * * * /myscript.sh >>/var/adm/myscript.log 2>&1
하루에 한 번
0 0 * * * /myscript.sh >>/var/adm/myscript.log 2>&1
답변2
디렉터리를 모니터링할 수 있는 항목을 원하시나요? incron은 다음과 같은 경우에 매우 편리합니다.
1. 저장소에서 incron을 설치합니다.
2. incron을 활성화합니다.
sudo systemctl enable incrond.service
sudo systemctl start incrond.service
3. 적절한 crontab을 생성합니다:
incrontab -e
콘텐츠로 추가되었습니다.
/path/to/watch IN_CREATE /path/to/mylogger.sh $@/$#
4. 로거 스크립트를 생성합니다:
cat <<EOF>> /path/to/mylogger.sh
#!/bin/bash
echo $1 >> /path/to/logfile
EOF
chmod +x /path/to/mylogger.sh
그게 다야.