我创建了一个脚本来删除旧文件并将其放在crontab中,每2分钟运行一次。我可以看到syslog显示运行的cronjob,但文件未被删除。我可以手动运行脚本,它运行没有任何错误。我还使用了“sudo crontab -e”,以便为cronjob提供root权限。有没有删除文件的想法?
Crontab如下:
*/2 * * * * /bin/bash /mnt/md0/capture/delete_old_pcap.sh
02 00,12 * * * sh /usr/bin/nfexpire.sh
脚本如下:
#!/bin/bash
ulimit -S -s 50000
LIMIT=10
NO=0
#Get the number of files, that has `*.pcap` in its name, with last modified
NUMBER=$(find /mnt/md0/capture/DCN/ -maxdepth 1 -name "*.pcap" |wc -l)
if [[ $NUMBER -gt $LIMIT ]] #if number greater than limit
then
del=$(($NUMBER-$LIMIT))
if [ "$del" -lt "$NO" ]
then
del=$(($del*-1))
fi
FILES=$(find /mnt/md0/capture/DCN/ -maxdepth 1 -type f -name "*.pcap" -print0 |$
rm -f ${FILES[@]}
#delete the originals
fi
答案 0 :(得分:1)
不确定它会解决您的问题,但请尝试:
*/2 * * * * /bin/sh /mnt/md0/capture/delete*.sh
02 00,12 * * * /bin/sh /usr/bin/nfexpire.sh
即。执行命令时,将完整的路径提供给shell。
我的通配符不起作用,因为其他脚本将被视为第一个脚本的参数(好点@broslow)。而是创建一个调用所有其他脚本的脚本。
如下所示:
脚本/mnt/md0/capture/delete.sh
:
for f in delete.d/*.sh; do
/bin/sh $f
done
所有脚本都在/mnt/md0/capture/delete.d/
然后在你的crontab中:
*/2 * * * * /bin/sh /mnt/md0/capture/delete.sh
最后在本地计算机上检查您的邮件,crontab通过邮件发送错误输出/报告(例如,在命令行上运行crontab的用户键入mail
,即在您的情况下以root用户身份)。