Я решил это с этим, но должен быть лучший способ!
<a class="btn btn-primary ${page==pages||pages==0?'disabled':''}" href="javascript:page(${page + 1});">Next</a>
<script>
location.queryString = {};
location.search.substr(1).split("&").forEach(function (pair) {
if (pair === "") return;
var parts = pair.split("=");
location.queryString[parts[0]] = parts[1] &&
decodeURIComponent(parts[1].replace(/\+/g, " "));
});
function page(p) {
window.location.queryString.page = p;
window.location.replace(window.location.pathname + "?" + $.param(window.location.queryString));
}
</script>
Перетащите куда-нибудь pid-файл (например, / tmp). Затем вы можете проверить, запущен ли процесс, проверив, существует ли PID в файле. Не забудьте удалить файл при чистом завершении работы и проверить его при запуске.
#/usr/bin/env python
import os
import sys
pid = str(os.getpid())
pidfile = "/tmp/mydaemon.pid"
if os.path.isfile(pidfile):
print "%s already exists, exiting" % pidfile
sys.exit()
file(pidfile, 'w').write(pid)
try:
# Do some actual work here
finally:
os.unlink(pidfile)
Затем вы можете проверить, запущен ли процесс, проверив, является ли содержимое /tmp/mydaemon.pid существующим процессом. Monit (упомянутый выше) может сделать это за вас, или вы можете написать простой сценарий оболочки, чтобы проверить его для вас, используя код возврата из ps.
ps up `cat /tmp/mydaemon.pid ` >/dev/null && echo "Running" || echo "Not running"
Для дополнительного кредита вы можете использовать модуль atexit, чтобы убедиться, что ваша программа очищает его pid-файл при любых обстоятельствах (когда его убили, возникли исключения и т. д.).
Я большой поклонник Supervisor для управления демонами. Он написан на Python, поэтому существует множество примеров того, как взаимодействовать с ним или расширять его с помощью Python. Для ваших целей API управления процессом XML-RPC должен работать хорошо.
Существует множество вариантов. Одним из методов является использование системных вызовов или библиотек Python, которые выполняют такие вызовы для вас. Другой - просто вызвать такой процесс, как:
ps ax | grep processName
, и проанализировать вывод. Многие люди выбирают этот подход, на мой взгляд, это не обязательно плохой подход.
There are very good packages for restarting processes on UNIX. One that has a great tutorial about building and configuring it is monit. With some tweaking you can have a rock solid proven technology keeping up your daemon.