2017-08-25 3 views
0

Je tente de configurer mon propre serveur Stanford CoreNLP en suivant le official guide. Cependant, je ne suis pas en mesure de démarrer le serveur en utilisant la commande suivante:Impossible de configurer mon propre serveur Stanford CoreNLP avec l'erreur "Impossible de supprimer le fichier de clé d'arrêt"

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 

Je coller les messages d'erreur ci-dessous:

my_server_name$ java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000 
[main] INFO CoreNLP - --- StanfordCoreNLPServer#main() called --- 
[main] INFO CoreNLP - setting default constituency parser 
[main] INFO CoreNLP - warning: cannot find edu/stanford/nlp/models/srparser/englishSR.ser.gz 
[main] INFO CoreNLP - using: edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz instead 
[main] INFO CoreNLP - to use shift reduce parser download English models jar from: 
[main] INFO CoreNLP - http://stanfordnlp.github.io/CoreNLP/download.html 
Exception in thread "main" java.lang.IllegalStateException: Could not delete shutdown key file 
at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.<init>(StanfordCoreNLPServer.java:195) 
at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.main(StanfordCoreNLPServer.java:1323) 
[Thread-0] INFO CoreNLP - CoreNLP Server is shutting down. 

Le principal problème est le IllegalSstateException: Impossible de supprimer le fichier de clé d'arrêt. Je me demande simplement si la cause de ce problème est l'accès sudo. Le guide officiel n'indique pas explicitement que cette commande nécessite un accès sudo.

Je veux demander 1) si la commande ci-dessus nécessite l'accès sudo et 2) si cette commande n'a pas besoin d'un accès sudo, quelle pourrait être l'erreur potentielle pour mon IllegalSstateException.

Merci. PS: Je suis sur un serveur avec Ubuntu 16.04.3 LTS.

Répondre

3

Cette erreur se produit lorsque le fichier de clé d'arrêt existe déjà sur votre système de fichiers, que vous démarrez une nouvelle instance de serveur CoreNLP et qu'il ne peut pas supprimer l'ancien fichier de clé d'arrêt. Courez-vous le serveur en tant que deux utilisateurs différents?

Plus généralement, avez-vous des autorisations sur le répertoire stocké dans la propriété java java.io.tmpdir? C'est, traditionnellement, /tmp sur les machines Linux. La clé d'arrêt est stocké dans:

System.getProperty("java.io.tmpdir") + File.separator + "corenlp.shutdown" 

Ainsi, pour un système Linux:

/tmp/corenlp.shutdown 

L'erreur indique que ce fichier existe, et ne peut être supprimé par Java. Vous devriez vérifier vos permissions sur ce fichier, et cela devrait vous aider à déboguer ce qui ne va pas.

Une solution de contournement facile, dans le pire des cas, consiste à définir vous-même tmpdir lors du démarrage du serveur. Par exemple:

java -Djava.io.tmpdir=/path/to/tmp -mx4g edu.stanford.nlp.pipeline.StanfordCoreNLPServer 9000 
+0

Nous vous remercions de votre réponse. Je n'ai pas l'accès pour supprimer un fichier sous/tmp /. Au lieu de cela, je mets moi-même le tmpdir au démarrage du serveur. Ça marche. Merci d'avoir répondu. –