Как мне написать PID в файл

Я знаю, что это может быть легко, но я не могу понять. Мы хотим запустить два экземпляра luigi на одной машине, поэтому нам нужно изменить скрипт init.d для записи PID в файл, а не просто касаться пустого файла.

echo -n $"Starting luigid scheduler as $LUIGID_USER: "
( ( /usr/bin/sudo -u $LUIGID_USER $LUIGID_BIN >>/var/log/luigid/server.log 2>&1 ) &)
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/luigid && echo_success || echo_failure
echo
return $RETVAL

В настоящее время это просто прикосновение к пустому файлу PID. Я хочу, чтобы он записал PID в файл. Также при остановке я хочу убить по PID, хранящемуся в файле PID

echo -n $"Stopping luigid scheduler: "
killproc luigid
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/luigid && echo_success || echo_failure
echo

Любая помощь, пожалуйста?

Спасибо

2 ответа

Вы можете получить PID предыдущей команды с $!

Измените стартовый скрипт на:

echo -n "Starting luigid scheduler as $LUIGID_USER: "
/usr/bin/sudo -u $LUIGID_USER $LUIGID_BIN >>/var/log/luigid/server.log 2>&1 &
RETVAL=$?
PID=$!
[ $RETVAL -eq 0 ] && echo $PID > /var/lock/subsys/luigid && echo_success || echo_failure
echo
return $RETVAL

Обратите внимание, что вам нужно снять квадратные скобки вокруг команды, поскольку они запускают программу в подоболочке. Subshell не вернет PID запущенной программы обратно в вашу оболочку, поэтому вы должны вызывать его непосредственно из вашей оболочки.

(man) shlock Должен сделать трюк для этого я верю:

shlock [-du] [-p PID] -f lockfile

...

shlock uses the link(2) system call to make the final target lock file, which
is an atomic operation (i.e. "dot locking", so named for this mechanisms 
original use for locking system mailboxes).  It puts the process ID ("PID") 
from the command line into the requested lock file.

Или в зависимости от ситуации (man) flock, для хорошего примера проверьте это: http://codehackit.blogspot.fr/2013/04/locking-processes-with-flock.html

Другие вопросы по тегам