【发布时间】:2022-01-23 20:22:23
【问题描述】:
我将下面的脚本作为守护进程运行。 它检查上传文件中的新 .gz 文件。将它移动到正确的位置 en gzip 的它。
当我手动运行脚本(以 root 身份(坏我))时,它可以工作。当守护进程运行时,它会给出错误
Dec 22 16:56:06 server watchftp.script[131856]: gzip: /var/www/html/config/MER2-SRX.conf.gz: unexpected end of file
我看不出问题出在哪里。还有人吗??
脚本代码:
#!/bin/bash
savedir='/var/www/html/config/'
inotifywait -m /srv/ftp/upload -e create -e moved_to |
while read dir action file; do
echo "The file '$file' appeared in directory '$dir' via '$action'"
#set correct permissions
chown root:root $dir$file
chmod 755 $dir$file
#create new filename and subdirectory name for save location
newfilename=$( echo -n $file | cut -d '_' -f 1)
parkdir=$( echo -n $newfilename | cut -d '-' -f 1)
mv $dir$file $savedir$newfilename.conf.gz
#check if subdirectory exist otherwise create it
if [[ ! -d $savedir$parkdir ]]; then
echo "create directory $savedir$parkdir"
mkdir $savedir$parkdir
fi
gunzip -dc $savedir$newfilename.conf.gz > $savedir$parkdir/$newfilename.conf
done
【问题讨论】:
-
我猜你是在作者写出所有(甚至可能是任何一个)之前尝试阅读它。尝试以某种方式等到它不再打开 (
lsof) 或查看它的大小以确定它何时不再增长。 -
顺便说一句,可能回顾一下When to wrap quotes around a shell variable?
-
另外,不要使用
echo -n。在某些版本中,这将在末尾打印没有换行符的字符串(您在这里并不真正想要),但在其他版本中,它将在行首打印“-n”(这你真的不想)。实际上,我会用内置替换替换整个cut事物:newfilename="${file%%_*}"。此外,没有-f或-i的mv总是让我感到紧张,因为它会默默地删除任何以前使用新名称的文件。 -
感谢 cmets。我将阅读关于 qoutes @tripleee 的信息。
-
可能尝试shellcheck.net 来捕捉更多这些常见的初学者错误,包括 Gordon 指出的几个。
标签: bash