Je sais qu'il a été un peu de discussion sur des sujets similaires à celui-ci. Mais voici ce que j'essaie fondamentalement de faire.
J'ai un répertoire surveillé appelé watched
et chaque fois qu'un fichier est ajouté à ce répertoire, je souhaite déclencher un script appelé syncbh.sh
qui extraira les fichiers de ce répertoire et les téléchargera sur un serveur distant.
La mise en garde est que les fichiers sont créés dans le répertoire watched
par un utilisateur (utilisateur2), mais que le script est exécuté par un autre (utilisateur1).
J'ai essayé d'utiliser incron pour accomplir cela, mais je continue à rencontrer un problème majeur car, alors que le script peut être exécuté manuellement par l'utilisateur 1 avec les privilèges root, le démon incron n'est jamais effectivement déclenchée automatiquement par un événement de création de fichier par l'autre utilisateur2.
J'ai réfléchi à la question de savoir si inoticoming serait une meilleure alternative, mais je ne suis pas sûr de la syntaxe de cette syntaxe. S'il existe un meilleur moyen d'accomplir cela, ou si je finis par utiliser inoticoming, quelle serait la syntaxe de la commande pour lui demander de regarder le répertoire /home/user1/watched
et d'exécuter le script /usr/local/bin/syncbh.sh
if un fichier est créé/modifié dans ce répertoire?
Toute aide serait très appréciée.
Utiliser inoticoming
:
Vous pouvez mettre un script dans /etc/init.d/
qui exécute inoticoming
au moment du démarrage.
Créez un nouveau dossier pour contenir le inoticoming
log/last pid
du dossier watched
: Sudo mkdir -p /var/log/inoticoming/watched/
Créez un script inoticoming_watched
dans /etc/init.d/
:
* N'oubliez pas de modifier <path_to_folder> et <path_to_script> pour qu'ils correspondent au chemin complet du dossier watched
et au chemin complet du script à exécuter.
#!/bin/sh
case "${1}" in
start)
inoticoming --logfile '/var/log/inoticoming/watched/inoticoming.log' --pid-file '/var/log/inoticoming/watched/inoticoming_last_pid.txt' <path_to_folder> <path_to_script> \;
;;
stop)
kill -15 $(< /var/log/inoticoming/watched/inoticoming_last_pid.txt tee)
;;
restart)
${0} stop
sleep 1
${0} start
;;
*)
echo "Usage: ${0} {start|stop|restart}"
exit 1
;;
esac
Marquez le script comme exécutable: Sudo chmod u+x /etc/init.d/inoticoming_watched
Assurez-vous que le script appelé par inoticoming_watched
est exécutable.
Mettez à jour rc.d
pour que le service inoticoming_watched
démarre au démarrage: Sudo update-rc.d inoticoming_watched defaults
Vous pouvez vérifier le journal inoticoming
dans /var/log/inoticoming/watched
.
Tout d’abord, installez inoticoming:
Sudo apt-get install inoticoming
Ensuite, utilisez cette commande:
Faites attention aux processus en cours d'inoticoming, car ils peuvent être démarrés plusieurs fois.
$ inoticoming /home/user1/watched /usr/local/bin/syncbh.sh /home/user1/watched/{} \;
^ ^ ^
| | |
^-- The directory to be monitored |
| |
^-- Your script |
^-- The parameter for your script
Le processus s'exécute en arrière-plan et surveille /home/user1/watched
Lorsqu'un fichier est ajouté ou modifié dans ce répertoire, le script /usr/local/bin/syncbh.sh
est appelé.
Le paramètre pour ce script est dans ce cas /home/user1/watched/<name_of_changed_or_modified_file>
{}
est remplacé par le nom du fichier