How can I run run occ db:add-missing-indices on shared hosting

I’ve updated to NC14 and I need to run

occ db:add-missing-indices

but I am on shared hosting and don’t have shell access.
What are my options?

I found a work around for this, so if anyone else finds themselves in the same boat, this is one way to resolve it.

I don’t have shell access, but through c-panel I can set cron jobs, so I just set a cron job to run the command, then deleted it once I hace receieved the email with the result of the completed command.

1 Like

Did the same here on “Hetzner” shared hosting in their “konsoleh” called hosting manager.

Just added a cron job with that command and ran that manually. Worked like a charm.

1 Like

Could you possibly send me the cron job you used for Hetzner? Really not getting any success on it!

Same issue - other result:

I HAVE an ssh access (1&1 Webhosting) but the occ command returns following error:

Failed loading opcache.so: opcache.so: cannot open shared object file: No such file or directory
X-Powered-By: PHP/4.4.9
Content-type: text/html


Warning: main(__DIR__/console.php) [function.main]: failed to open stream: No such file or directory in /homepages/xxxxx/occ on line 11

Fatal error: main() [function.require]: Failed opening required '__DIR__/console.php' (include_path='.:/usr/lib/php4.4') in /homepages/xxxxx/occ on line 11

Any hints???

Many thx :slight_smile:

PHP4.4 ist wohl zu alt. Mit
php7.1 ./occ db:add-missing-indices
funktioniert es.

2 Likes

Danke für den Hinweis; Instanz läuft allerdings eh schon auf PHP 7.1; kein Plan woher die Referenz auf 4.4 kommt - wahrscheinlich irgendwo ein Pfad falsch gesetzt?!?
Hab’s inzwischen über die direkten SQL Statements gelöst (siehe https://github.com/nextcloud/server/issues/11491)

Hi,

ich glaube nicht unbedingt, dass der Fehler auf User-Seite liegt.

Im 1und1-Hosting gibt es einige Besonderheiten. Eine davon (und die hat es wirklich in sich) ist ein sogenanntes session limit “zum Schutz” der laufenden Instanzen in einem Hosting-Paket:

Es wird nur eine bestimmte Anzahl von quasi gleichzeitigen Zugriffen auf das gesamte (!) Paket zugelassen.

Heisst:
Wenn 50 gleichzeitige Zugriffe auf das Paket (alle Domains und Sub-Domains) erfolgen, dann kommt auf jeden Fall eine Fehlermeldung. Es zählen auch SSH-Zugriffe mit, nicht nur Web-Zugriffe.

Ich habe im Oktober 2018 in einem Pro-Paket die Grenze mit einfachstem SHTML und PHP (echo “bla”:wink: bei 23 entdeckt, offiziell waren es im Frühjahr 2018 16 sessions (da bin ich bei einem Kunden darüber gestolpert und bei der Fehlersuche beinahe wahnsinnig geworden).

Wenn der cronjob oder ein Besucher des Pakets “zufällig” die Grenze knackt, dann läuft das nicht. Das gesamte Paket ist dann für kurze Zeit lahm gelegt (error 500).

1 Like

Hi,
hab gerade erst bemerkt (sry, bin kein großer Linux-Guru :smile: ), dass 1&1 in meinem Hostingpaket zwar einen SSH Zugang bietet, aber in der Shell tatsächlich PHP 4.4.9 (!!) aufruft.
Ich denke, das dürfte ein (Haupt-)grund für die Unmöglichkeit der Ausführung von occ sein.
Sudo “kennt” die abgestrippte Shell verständlicherweise auch nicht, was außerdem die Ausführung unter einem anderen User unmöglich machen dürfte. Demnach wird mir wohl der Zugang zu occ weiterhin verwehrt bleiben… :frowning:

Ich würde mich mit SSH anmelden, php eintippen und dann die TAB-Taste nehmen. Anschließend erhält man per completion eine Auswahl der in der shell verfügbaren php-Versionen.

Die gewünschte Version in occ (1. Zeile) eintragen und es läuft (wahrscheinlich).
edit:
Hab nachgeschut - im Angebot ist beispielsweise php7.1-cli.

Demzufolge würde ich in occ die erste Zeile von “php” auf “php7.1-cli” ändern und es nochmals versuchen.

Jep - das war’s!! -> Also occ einfach nur mit der richtigen PHP Version aufrufen:

$ php7.1-cli occ

  • et voilà!

Mille Grazie, diri!!!

Hi @duncanmid and thanks for your message.

Could you just write us exactly the command line that you executed in CRON job?

From my experience, and at OVH’s shared hosting , it seems to me that CRON jobs only execute a file.

Thank you in advance

That’s right, so you may have to supply the full path to the occ file. Thus, for example, this, which worked in my case (without having to use the php-cli command):

/usr/local/bin/php /home/myusername/nextcloud/occ db:add-missing-indices

Hello,

please see

Hallo Maulwurf,

ich habe da einiges versucht, Klappt leider bei Hetzner nicht wie ich das denke.

/usr/local/bin/php /home/myusername/nextcloud/occ db:add-missing-indices

Kannst du mir helfen? Das wäre super. Welchen Interpreter sollte ich einstellen und wie genau blaue ich mir den Pfad bei hetzner zusammen?

Danke !
Sascha

See https://wiki.hetzner.de/index.php/KonsoleH:Cronjob-Manager#Skriptpfade

1 Like

Hallo srosner,

Die Antwort von rakekniven hilft bereits sehr.

See https://wiki.hetzner.de/index.php/KonsoleH:Cronjob-Manager#Skriptpfade

Siehe mein Bild für meine Konfiguration:
13

Der Skriptpfad ist wie folgt:
/usr/www/users/FTPBENUTZERNAME/NEXTCLOUDORDNER/occ befehl

Das alles ist ohne Aufrufe wie “php”, “usr/local/bin/php”, etc aufzurufen. Dafür wählt man ja im oberen Drop-Down Menü “PHP-CLI” aus. Danach den Cron-Job manuell ausführen. Lief bei mir problemlos.

Viele Grüße,
Maulwurf

1 Like

Hi,
ich habe auch bei 1&1 ssh-Zugriff und mit
php7.3 ./occ db:add-missing-indices
gab es folgende Fehlermeldung:
X-Powered-By: PHP/7.3.13
Content-type: text/html; charset=UTF-8

An unhandled exception has been thrown:
TypeError: Return value of OC\AppFramework\Http\Request::getScriptName() must be of the type string, null returned in /homepages/MeinVerzeichnis/htdocs/lib/private/AppFramework/Http/Request.php:836
Stack trace:
#0 /homepages/MeinVerzeichnis/htdocs/lib/base.php(159): OC\AppFramework\Http\Request->getScriptName()
#1 /homepages/MeinVerzeichnis/htdocs/lib/base.php(582): OC::initPaths()
#2 /homepages/MeinVerzeichnis/htdocs/lib/base.php(1089): OC::init()
#3 /homepages/MeinVerzeichnis/htdocs/console.php(48): require_once('/homepages/...')
#4 /homepages/MeinVerzeichnis/htdocs/occ(10): require_once('/homepages/...')

Das sieht gar nicht soo gut aus… Was nun? Jemand eine Idee? Danke für eure Tipps im Voraus.
JamFX

You most likely have to execute

sudo -u www-data php occ db:add-missing-indices

and provide your normal user password. Don’t do this as root, but as a normal user in the nextcloud folder, which usually is

/var/www/nextcloud

1 Like

Hallo jamfx,

wenn du den Befehl über SSH absetzt, befindest du dich dann im Verzeichnis /homepages/MeinVerzeichnis/htdocs/?

Wenn ja, dann kannst du das ./ vor dem occ weg lassen. Wichtig zu wissen ist auch, ist der Benutzer mit welchem du per SSH angemeldet bist, auch gleichzeitig der Webserver Benutzer?

Wie findet man das heraus?

Verbinde dich per SSH und führe dann den folgenden Befehl aus:

ls -alh /homepages/MeinVerzeichnis/htdocs/

Der Befehl listet Dir nun den Inhalt, sowie den Benutzer und die Gruppe des Inhalts im Verzeichnis auf.

Beispiel:

# ls -alh /var/www/nextcloud/htdocs/

total 120K
drwxrwxrwx. 14 apache apache 4.0K Feb  6 11:36 .
drwxr-xr-x.  4 root   root     53 Dec 19 10:40 ..
drwxr-xr-x  33 apache apache 4.0K Feb  6 11:35 3rdparty
drwxr-xr-x  47 apache apache 4.0K Feb 18 12:43 apps
-rw-r--r--   1 apache apache  12K Feb  6 11:35 AUTHORS
drwxr-xr-x   2 apache apache   66 Feb  6 11:36 config
-rw-r--r--   1 apache apache 3.8K Feb  6 11:35 console.php
-rw-r--r--   1 apache apache  34K Feb  6 11:35 COPYING
drwxr-xr-x  23 apache apache 4.0K Feb  6 11:35 core
-rw-r--r--   1 apache apache 4.9K Feb  6 11:35 cron.php
-rw-r--r--   1 apache apache 2.6K Feb  6 11:38 .htaccess
-rw-r--r--   1 apache apache  156 Feb  6 11:35 index.html
-rw-r--r--   1 apache apache 3.1K Feb  6 11:36 index.php
drwxr-xr-x   6 apache apache  125 Feb  6 11:35 lib
-rw-r--r--   1 apache apache  283 Feb  6 11:35 occ
drwxr-xr-x   2 apache apache   23 Feb  6 11:36 ocm-provider
drwxr-xr-x   2 apache apache   55 Feb  6 11:35 ocs
drwxr-xr-x   2 apache apache   23 Feb  6 11:35 ocs-provider
-rw-r--r--   1 apache apache 2.9K Feb  6 11:36 public.php
-rw-r--r--   1 apache apache 5.1K Feb  6 11:36 remote.php
drwxr-xr-x   4 apache apache  107 Feb  6 11:36 resources
-rw-r--r--   1 apache apache   26 Feb  6 11:35 robots.txt
drwxr-xr-x  13 apache apache  264 Feb  6 11:35 settings
-rw-r--r--   1 apache apache 2.3K Feb  6 11:36 status.php
drwxr-xr-x   3 apache apache   35 Feb  6 11:35 themes
drwxr-xr-x   2 apache apache   43 Oct 12  2018 updater
-rw-r--r--   1 apache apache  101 Feb  6 11:35 .user.ini
-rw-r--r--   1 apache apache  362 Feb  6 11:35 version.php

Im obigen Beispiel ist der Webserver Benutzer und die Gruppe apache

In diesem Fall müsste man nun den OCC Befehl wie folgt absetzen:

Vorausgesetzt man befindet sich im Verzeichnis, welches die OCC Datei beinhaltet.

sudo -u apache php7.3 occ db:add-missing-indices

EDIT: Das Thema weiter oben noch einmal näher verfolgt, es könnte auch sein, dass du php7.3-cli anstatt php7.3 benutzen musst.

1 Like