我希望有人能指出我正确的方向。我想创建一个脚本来检查目录中的新文件(具有今天日期的文件),然后将结果打印到文本文件。我可以使用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 shell,/usr/bin/sh
非常接近克什93。所以你可以比较两个文件的年龄和[[ file1 -nt file2 ]]
返回值真的iffile1
比 更新file2
。不要/usr/bin/ksh
在 HP-UX 上使用,它是一个非常古老的标准 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"
你可以运行它计划任务, 例如 :
每五分钟一次(请注意,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. 启用 incrond:
sudo systemctl enable incrond.service
sudo systemctl start incrond.service
3.创建适当的crontab:
incrontab -e
并添加为内容:
/路径/到/watch IN_CREATE /路径/到/mylogger.sh $@/$#
4.创建记录器脚本:
cat <<EOF>> /path/to/mylogger.sh
#!/bin/bash
echo $1 >> /path/to/logfile
EOF
chmod +x /path/to/mylogger.sh
就是这样。