Hey
@TRmediendesign , hey
@ThiloS ,
quick heads-up before anything else: the only confirmed fix in this thread is Thilo's (VirtueMart's vmloaderpluginupdate.php plus OnePage Checkout, disabled = instances came back). For Tobias the cause is still unknown, so what follows is a way to find it, not a guaranteed fix.
The theory that fits everything so far: the Toolkit asks each Joomla instance for info through Joomla's CLI. If a plugin throws an error or spits out extra output during that call, the Toolkit drops the instance. That's why the sqlite DB still lists them, but the UI doesn't, and nothing shows up as "Broken". Plesk staff mentioned the same thing with the Linky Map plugin. This is a theory, not proof.
--- READ THIS BEFORE YOU RUN ANYTHING ---
1) Steps 1 and 2 only read. Step 3 CHANGES a live database. Only do Step 3 if Step 1 clearly points at one specific plugin.
2) If the site is a shop (VirtueMart, OnePage Checkout, anything with a checkout): disabling a plugin can break ordering for real customers. Test on a copy first, or do it outside business hours, and keep the backup from Step 3 ready.
3) Plain "mysql" or "mysqldump" as root will NOT work on a Plesk server. Plesk's MariaDB has no root user, it uses "admin" and keeps the password in /etc/psa/.psa.shadow. Without that you just get "Access denied for user 'root'@'localhost'". All DB commands below use the admin login for that reason. Don't skip the backup just because the command errors out, check that the dump file exists and isn't empty before you continue.
Placeholders are in <angle brackets>. Run everything as root.
Step 1: Run the Joomla CLI by hand on a missing instance (read only)
Use the system user of the subscription and the PHP version the site uses. Joomla 4/5 only, Joomla 3 has no cli/joomla.php.
Code:
plesk bin site --info <DOMAIN> | grep -i -E "system user|php"
su -s /bin/bash <SYSTEM_USER> -c "cd <DOCROOT> && /opt/plesk/php/<PHP_VERSION>/bin/php cli/joomla.php list"
Then the same on one instance that DOES show up in the Toolkit. If the missing one prints warnings, notices, fatal errors or any extra junk above the normal output and the working one doesn't, you've found the culprit area. The error usually names the plugin file.
Step 2: Compare plugin files between a working and a missing instance (read only)
Even if the extension list looks the same, this catches leftovers and files you wouldn't spot in the backend.
Code:
diff <(cd <DOCROOT_WORKING> && find plugins -type f | sort) <(cd <DOCROOT_MISSING> && find plugins -type f | sort)
Anything that exists only on the missing instances is suspect. Also check the PHP error log of the domain at the time you run Step 1.
Step 3: Disable the suspect plugin, then rescan (CHANGES the database)
Only if Step 1 or 2 clearly names a plugin, and only after reading the warning above. Easiest and safest: Joomla backend > System > Plugins > disable it there. Use the database route only if the backend is no option.
First find the DB name and table prefix of that instance:
Code:
grep -E "(db|dbprefix|host) =" <DOCROOT>/configuration.php
Backup first (admin login, see warning 3), then check that the file isn't empty:
Code:
mysqldump -uadmin -p"$(cat /etc/psa/.psa.shadow)" <DB_NAME> > /root/<DB_NAME>-$(date +%F).sql
ls -lh /root/<DB_NAME>-$(date +%F).sql
Look up the plugin, then disable exactly that one row:
Code:
mysql -uadmin -p"$(cat /etc/psa/.psa.shadow)" <DB_NAME> -e "select extension_id,name,element,type,enabled from <PREFIX>_extensions where type='plugin' and element like '%<PLUGIN_NAME>%'"
mysql -uadmin -p"$(cat /etc/psa/.psa.shadow)" <DB_NAME> -e "update <PREFIX>_extensions set enabled=0 where extension_id=<EXTENSION_ID>"
To undo it, same command with enabled=1.
Then run "Find Joomla! Websites" again in the Toolkit. For Thilo's case the two culprits were:
Code:
vmloaderpluginupdate.php (VirtueMart)
OnePage Checkout (extension)
If the instance comes back, you know which plugin it is. Update or replace it, re-enable and check again.
Step 4: Still nothing?
Open a ticket with Plesk support (as suggested earlier in the thread) and attach:
Code:
plesk -v
sqlite3 /usr/local/psa/var/modules/joomla-toolkit/joomla-toolkit.sqlite3 "select id,domain,displayName,site,root from instances;"
plus the full output of the CLI run from Step 1 for one missing instance. That's the thing they'll want to see first.
Hope that helps. Report back what Step 1 prints, that's the interesting part.
Regards
Tessa