ユーザーが作成したファイルを削除できない理由

ユーザーが作成したファイルを削除できない理由

ファイルの削除に関する質問を再発行します。 2つのSCO Unixシステム間でファイルを転送するためのスクリプトがあります。シナリオは長年にわたり堅固に保たれてきました。最近、ある場所のファイアウォールデバイスにエラーが発生して交換されました。 VPNトンネルを開き、FTPが機能し、ファイルを転送できますが、ファイルを削除するとスクリプトがクラッシュします。
スクリプトは、進行中のFTP転送を識別するためにローカルファイル(「ロックファイル」と呼ばれる)を作成します。ファイルは、スクリプトがそれを識別できるようにファイル名にPIDを使用します。その後、FTP転送後、スクリプトはファイルを削除して転送プロセスが完了したことを明確に示します。 FTP転送完了 - ファイルが転送されました。 FTPセッションが閉じられたというメッセージが画面に表示されます。ただし、ロックされたファイルを削除するとスクリプトは停止します。

また、スクリプトは「使用されていない」ロックファイルの削除もサポートしていますが、これもできません。

ターゲットシステムのファイアウォールがローカルシステムにどのような影響を与えるかは不明ですが、これは症状です。

現在、システム管理者はいません。私は現在、このニッチ市場を埋めようとするプログラマーです。私は「粘着性のあるビット」について何も知りません。ここに明らかなことはありますか?どこを見なければならないかについての手がかりがあれば感謝します。

スクリプトは次のとおりです。

# Usage: storeftpputall machine
set -x
MACHINE=$1          # name of remote machine
USERNAME='ftpstore' 
PASS='ftppassword'      
PUBDIR='/u/ftpstore'        # Transfer directory tree
INDIR='transfer/in'     # Remote system, where files go in
MYNOWPID=$$             # Proc ID of this process.

# Make sure no other storeftpputs are running to that store, 
# else you could get an attempted overwrite, or at least overload
# the modem line.  Use PID lock files. 

# Check for PID file locking ftp to remote store
if [ -f /usr/tmp/$MACHINE.put.* ]
then
    STORELOKPID1=''
    STORELOKPID1=`ls /usr/tmp/$MACHINE.put.* | sed -e "s|$MACHINE\.put\.||g"`
    for j in $STORELOKPID1
    do
    k=`basename $j`
    LIVEPID=`ps -ef | grep $k | grep -v 'grep'`
    if [ -n "$LIVEPID" ]
    then
        echo 'Storeftpput script already in progress. Please wait'
        sleep 2
    else
        echo "Removing stale lockfile $MACHINE.$k"
        rm "/usr/tmp/$MACHINE.put.$k"   # Remove stale lock file
        sleep 2
    fi
    done
fi

# Any stale locks should be gone. Wait for any live
# storeftpput scripts to finish and remove their own lockfiles, 
# then proceed. 
while [ -f /usr/tmp/$MACHINE.put.* ]
do
    echo 'Storeftpput script already in progress. Please wait.'
    echo "Retrying at 45 second intervals."
    sleep 45
done

# Assert own lockfile on line
touch /usr/tmp/$MACHINE\.put\.$MYNOWPID
chmod 664 /usr/tmp/$MACHINE\.put\.$MYNOWPID

# Check for outbound store files. If found, send them. 
cd $PUBDIR/out/$MACHINE
if [ -f *.tar.Z ]
    then

    NUMBER=`ls *.tar.Z|sed -e "s|\.tar\.Z||g"`      # Get tar file numbers
    for j in $NUMBER   # May be more than one
    do
    ftp -i -n -v $MACHINE <<-EndFTP 
        user $USERNAME $PASS
        cd $INDIR
        lcd $PUBDIR/out/$MACHINE
        binary
        hash
        put $j.tar.Z
        chmod 666 $j.tar.Z
        close
        EndFTP
    rm $j.tar.Z
    done
fi

# Remove storeftpput lockfile
rm /usr/tmp/$MACHINE\.put\.$MYNOWPID

echo "Done..."
sleep 1

ベストアンサー1

/usr/tmp/$MACHINE.put.$MYNOWPID と同じパスを使用するのはなぜですか?

/usr/tmp/$MACHINE/.put/.$MYNOWPID を使用しないでください。

おすすめ記事