
Я использую SlimerJs как headless браузер на сервере. Поскольку на сервере нет xserver, я использовал xvfb для его запуска.
Команда выглядит примерно так:
xvfb-run --server-args="-screen 0, 1024x768x24" slimerjs-0.10.0pre/slimerjs \
script.js --debug=yes "/tmp/file986Iww" "/tmp/file28bAEv" "pdf"
Файл script.js
принимает имя файла для входных данных, имя файла для выходных данных и формат для преобразования, используя возможности принтера Slimer.
Моя проблема в том, что при запуске от имени root все работает нормально. Но когда я позволяю apache выполнять работу, он падает и зависает.
Apache работает под www-data
пользователем и группой. Это вывод предыдущей команды:
slimerjs-0.10.0pre/xulrunner/xulrunner -app slimerjs-0.10.0pre/application.ini --profile /tmp/slimerjs.gRAJJar6 -no-remote script.js --debug=yes /tmp/file986Iww /tmp/file28bAEv pdf
Xlib: extension "RANDR" missing on display ":99".
JavaScript warning: resource://slimerjs/slUtils.jsm, line 154: JavaScript 1.7's let blocks are deprecated
JavaScript error: jar:file:///var/www/project/slimerjs-0.10.0pre/xulrunner/omni.ja!/components/XULStore.js, line 66: NS_ERROR_FAILURE: Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIProperties.get]
** stuck forever here **
Строка 66 XULStore.js
:
65. Services.obs.addObserver(this, "profile-before-change", true);
66. this._storeFile = Services.dirsvc.get("ProfD", Ci.nsIFile);
67. this._storeFile.append(STOREDB_FILENAME);
Попытка выяснить, что не так со strace, показала мне, что он застрял в каком-то цикле...
Я не вижу причин, по которым этот пользователь не может запустить этот исполняемый файл.
Как мне отладить, какого разрешения не хватает или что не так с xulrunner?
Я не выкладывал трассировку, так как она довольно тяжелая. Не стесняйтесь спрашивать ее, если считаете, что она может содержать важную информацию.
$ uname -a
Linux *host* 3.10-0.bpo.2-amd64 #1 SMP Debian 3.10.5-1~bpo70+1 (2013-08-11) x86_64 GNU/Linux
решение1
Возможно, у вас нет прав доступа или записи в каталог профиля, который вы пытаетесь получить.
Хотя вы (предположительно) пытаетесь установить каталог профиля --profile /tmp/slimerjs.gRAJJar6
черезДокументация SlimerJSуказывает, что это должно быть -profile
(одинарное тире)
По умолчанию, если вы опускаете опцию профиля, как это, судя по всему, происходит из-за двойного тире вместо одинарного, то «SlimerJS [будет] создавать временный профиль каждый раз при запуске», создавая новый каталог в «$HOME/.innophi/slimerjs/».
Поскольку вы пытаетесь запустить это как , www-data
проверьте их домашний каталог и убедитесь, что вы можете создавать и получать доступ к файлам в каталоге SlimerJS по умолчанию, или используйте -profile
вместо --profile
и убедитесь, что вы можете создавать и получать доступ к файлам в указанной папке.