Hi Thomas,

Have you tried replacing your /bin/sh startup script with
a python script (using the same interpreter path
that your app uses) that does the same thing?

cheers,
Luke.

On 20-08-17 09:55, Thomas Klausner wrote:
  | Hi Leo!
  | 
  | On Mon, Aug 17, 2020 at 09:45:08AM +0200, Leonardo Taccari wrote:
  | > > I wanted to run a python service using an rc.d script. It knows to 
write a pid file, but that is not good enough for our rc.d system. It complains:
  | > >
  | > > # /etc/rc.d/syncserver stop                                             
                                                                     
  | > > syncserver not running? (check 
/home/wiz/Projects/syncserver/syncserver.pid).
  | > >
  | > > I think this happens because the executable is not called “syncserver” 
but is started using a python2.7 binary. So I tried setting
  | > >
  | > > command_interpreter="/home/wiz/Projects/syncserver/local/bin/python2.7"
  | > >
  | > > but then I got
  | > >
  | > > /etc/rc.d/syncserver: WARNING: $command_interpreter 
/home/wiz/Projects/syncserver/local/bin/python2.7 != /bin/sh
  | > >
  | > > Is there a way to get python programs running nicely with rc.d and pid 
support (i.e. “status” and “stop” support)?
  | > > [...]
  | > 
  | > Was `command' adjusted too to the path of the script?
  | > Can you please share the possible problematic rc.d script?
  | > 
  | > pkgsrc/chat/miniircd/files/miniircd.sh is a possible example (but it
  | > doesn't use any pidfile).
  | 
  | I think the issue is with the pidfile support. Starting the service works 
fine.
  | 
  | Attached are the rc.d script and the file from /usr/local that is the
  | actual start script.
  |  Thomas

  | #!/bin/sh
  | #
  | # $NetBSD$
  | #
  | # PROVIDE: syncserver
  | # REQUIRE: DAEMON
  | 
  | . /etc/rc.subr
  | 
  | name="syncserver"
  | rcvar=${name}
  | command="/usr/local/bin/syncserver"
  | # doesn't work, only /bin/sh seems to be supported
  | #command_interpreter="/home/wiz/Projects/syncserver/local/bin/python2.7"
  | required_files="/home/wiz/Projects/syncserver/syncserver.ini"
  | # doesn't work, since argv[0] is python2.7 and not the script name
  | pidfile="/home/wiz/Projects/syncserver/syncserver.pid"
  | 
  | load_rc_config $name
  | run_rc_command "$1"

  | #!/bin/sh
  | set -e
  | cd /home/wiz/Projects/syncserver
  | ./local/bin/gunicorn --paste ./syncserver.ini --access-logfile 
/var/log/syncserver.log  --log-syslog --pid ./syncserver.pid

Reply via email to