From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sebastian Rose Subject: Re: Re: org batch job using emacsclient? Date: Tue, 17 Nov 2009 03:25:34 +0100 Message-ID: <87bpj13n1d.fsf@gmx.de> References: <4A2B8DB1-1A56-40CA-B972-E44C16F9DD1E@nf.mpg.de> <873a4e329l.fsf@dynapse.com> <9F07BE57-B87D-4433-8489-4CDD268EC638@nf.mpg.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NADlT-0002JB-8J for emacs-orgmode@gnu.org; Mon, 16 Nov 2009 21:25:55 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NADlO-0002Ij-Nk for emacs-orgmode@gnu.org; Mon, 16 Nov 2009 21:25:54 -0500 Received: from [199.232.76.173] (port=48832 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NADlO-0002Ig-I4 for emacs-orgmode@gnu.org; Mon, 16 Nov 2009 21:25:50 -0500 Received: from mail.gmx.net ([213.165.64.20]:55450) by monty-python.gnu.org with smtp (Exim 4.60) (envelope-from ) id 1NADlO-0003Ki-2H for emacs-orgmode@gnu.org; Mon, 16 Nov 2009 21:25:50 -0500 In-Reply-To: <9F07BE57-B87D-4433-8489-4CDD268EC638@nf.mpg.de> (Stefan Vollmar's message of "Tue, 17 Nov 2009 01:12:09 +0100") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Stefan Vollmar Cc: "Gregory J. Grubbs" , emacs-orgmode Stefan Vollmar writes: > Gentlemen, > > thanks for the many helpful replies! > > To start with, it now works for me and I can measure a consistent speedup= of 7x > (!) for using emacsclient - in an interactive web service (conversion of > org-files to HTML) the difference between 0.35 s and 2.40 s (average) is > significant. That was to be expected :) > (1) Having started the emacs server with > > emacs --daemon=3Dorg > > this shell script works for me: > > #!/bin/sh > emacsclient -s org > --eval "(progn > (add-to-list 'load-path \"/opt/org-6.33c/lisp/\") > (require 'org)(require 'org-exp) > (setq org-export-headline-levels 2) > (find-file \"$1\") > (org-export-as-html 2 nil nil nil nil \".\") > (kill-buffer))" > > I have added a (kill-buffer) statement for cleaning up (I observed an inc= reasing > number of emacsclient processes before), is this a good solution? Does it help? Then I think it's ok. The `usual' way to close a server buffer is `C-x #' which is bound to the function `server-edit'. That's what I use in org-protocol.el. The name is somewhat confusing, though. Another trick is, to simply not wait for a reply from the server at all: emacsclient --no-wait ... > (2) A problem remains with (1): it seems that I need to "name" the daemon. > Otherwise there could be a conflict with Emacs daemons started by other u= sers. > How can I make sure the daemon is running if the script requires it? I re= ad > about a "-a" option for emacsclient - how would this work in my case? I would start Emacs in rc.emacs-server like this (but maybe use no server at all, see below): /path/to/emacs -Q -l /etc/emacs-server/init.el --daemon=3DSERVER-NAME /path/to/emacsclient --no-wait --socket-name=3DSERVER-NAME xy.org You could also use an absolute path for the socket. and put all required setup into /etc/emacs-server/init.el. `-Q' ensures emacs will start correctly, even if a user without a home-directory (e.g. apache user) starts it and thus no ~/.emacs can be found (start-stop-daemon switches to the UID you tell it). Also, if started as root, emacs will _not_ load root's .emacs. Start Emacs in an /etc/init.d/rc.emacs-server script to make sure it starts when you restart the server. Use `start-stop-daemon' to do so [1] and provide the commands `start', `stop', `restart' and `status' maybe. A cron-job could check for a running emacs-server via /etc/init.d/rc.emacs-server status every 5 minutes or so. If that fails, re-start Emacs. Your script could check for the running Emacs, too, and restart it as necessary. Are you familiar with init.d stuff? There is an example file somewhere on Debian... http://github.com/SebastianRose/denycc/blob/master/scripts/rc.denycc is made from such an example file for Debian 4.0 Access privileges might be important. Unfortunately I have no good concept at hand - I don't thing emacs-server offers one at all, actually. Something to read... At least I would add something like this to your emacsclient shell-script (insert you Apaches EUID for the 99): if [ 99 -ne $EUID ];then echo "Got to be a native American to execute this command!" exit 124 fi Best wishes Sebastian =3D=3D Footnotes: =3D=3D=3D=3D [1] From `man start-stop-daemon' (German version - English version below): BESCHREIBUNG start-stop-daemon wird zur Steuerung der Erzeugung und Beendigung von Prozessen auf Syste=E2=80=90 mebene verwendet. Durch die Verwend= ung einer der Abgleich-Optionen kann start-stop-daemon so konfiguriert werden, dass er existierende Instanzen von einem laufenden Prozess finden kann. Hinweis: Falls --pidfile nicht angegeben ist, verh=C3=A4lt sich start-stop-daemon =C3=A4hnlich zu killall(1). start-stop-daemon wird die Prozesstabelle nach Prozessen durchsuchen, die auf den Prozessnamen, uid und/oder gid (falls angegeben) passen. Jeder passende Prozess wird --start daran hindern, den Daemon zu starten. Allen passenden Prozessen wird das KILL-Sig=E2=80=90 nal geschickt, falls --stop angegeben ist. F=C3=BCr Daemons die langlebi= ge Kinder haben, die ein --stop =C3=BCberleben sollen, m=C3=BCssen Sie = eine PID-Datei angeben. * man -L en_US start-stop-daemon: DESCRIPTION start-stop-daemon is used to control the creation and termination of system-level pro=E2=80=90 cesses. Using one of the matching opti= ons, start-stop-daemon can be configured to find existing instances of a running process. Note: unless --pidfile is specified, start-stop-daemon behaves similar to killall(1). start-stop-daemon will scan the process table looking for any processes which match the process name, uid, and/or gid (if specified). Any matching process will prevent --start from starting the daemon. All matching processes will be sent the KILL signal if --stop is specified. For daemons which have long-lived children which need to live through a --stop, you must specify a pidfile.