Linux troupeau, comment il “suffit” de verrouiller un fichier?

En Bash, je suis en train de faire une fonction getLock pour être utilisé avec différents noms de verrouillage.

function getLock
{
    getLock_FILE=""
    getLock_OP=""
    case "${getLock_OP}" in
        "LOCK_UN")
            flock -u "${getLock_FILE}"
            rm -fr "${getLock_FILE}"
            ;;
        "LOCK_EX")
            flock -x "${getLock_FILE}"
    esac
}

Mais troupeau dit flock: bad number: myfilelock

Comment puis-je verrouiller un fichier, et de le libérer quand je veux, sans avoir à exécuter une commande dans le troupeau?

C'est pour être utilisée comme ceci:

getLock myfilelock LOCK_EX
somecommands
........
getLock myfilelock LOCK_UN
  • Je ne te comprends pas. Je n'ai pas wan pas de verrouiller un fichier modifié, veulent juste pour obtenir un verrou sur elle afin qu'un autre processus en cours d'exécution en PHP qui verrouille le même fichier, qui attend d'être libéré.
  • Refonte de votre script à utiliser flock pour chaque instance qui doit être de verrouillage protégé. Sinon, il suffit de créer vos propres fichiers de verrouillage, c'est juste des fichiers normaux...
  • Donc flock fonctionne comme: processus 1 exécute les flock lockfile command_to_run, processus 2 exécute flock lockfile some_command. Maintenant, la deuxième aura lieu jusqu'à la première finitions. Simple que cela. Même pas besoin de soins sur le fichier de verrouillage lui-même, flock poignées automatiquement.
  • flock verrous de descripteurs de fichier, pas de fichiers. C'est important, car cela signifie que vous pas verrouiller un fichier que vous n'êtes pas tenue ouvert pour la durée de la serrure.
  • Pour info, le function mot-clé est gratuitement incompatible avec POSIX sh, et n'ajoute aucune valeur, que ce soit au cours de la POSIX syntaxe pour la déclaration des fonctions. Aussi, pourquoi utiliser des espaces de variables globales lorsque vous pouvez simplement utiliser habitants? Aussi, ne JAMAIS ne JAMAIS ne JAMAIS ne JAMAIS supprimer les fichiers de verrous créés avec flock (sauf si vous êtes complètement sûr que personne ne peut être en essayant d'attraper un verrou en même temps-ce redémarrage est sûr), ce qui crée des conditions de course. Laisser le déverrouillage des fichiers sur le disque pour s'assurer que, si les deux programmes d'essayer de saisir simultanément le même libéré de verrouillage, ils obtiennent le même inode.
  • Je pensais qu'il n'y avait pas de variables locales, vous devez utiliser le "déclarer" pour eux, à être locale? C'est pourquoi j'ai utilisé les espaces de noms. Et je ne devrais pas utiliser la fonction de mot-clé que vous dites? Juste le nom et les accolades?
  • declare va rendre les choses locale, si utilisé à l'intérieur d'une fonction, mais il y a aussi un local de mots clés disponibles.
  • correct, juste le nom et bretelles; la function mot-clé de votre code incompatible avec d'autres coquilles, mais (contrairement à beaucoup d'autres, plus utiles bashisms) n'ajoute aucune valeur en faire.

InformationsquelleAutor JorgeeFG | 2014-06-24