Appliance Timezone Mismatch Estimated Reading Time: 2 Minutes The nightly appliance status check can report a timezone mismatch between your app host and your appliance host. This article explains the error, its root cause, and how to fix it. Error text: Nightly appliance status check failed: - Appliance's timezone is different than application's timezone. - Appliance's database timezone is different than application's database timezone. What the Check Compares Ubersmith (the app host) and the appliance (a separate host) each report their own PHP timezone and database session timezone. The nightly check compares these four values: Value Source Application's timezone PHP date_default_timezone_get() on the app host Appliance's timezone PHP date_default_timezone_get() on the appliance host, fetched over HTTP Application's database timezone @@session.time_zone on the app host's database Appliance's database timezone @@session.time_zone on the appliance host's database On the appliance side, one TIMEZONE environment variable drives both the PHP timezone and the forced SET @@session.time_zone on every database connection. Fixing that one variable resolves both bullet points in the error at the same time. Root Cause You do not set TIMEZONE directly. The installer generates it automatically by reading each host's /etc/localtime at install or upgrade time, separately for each host: App host: written into docker-compose.override.yml Appliance host: written into appliance-docker-compose.override.yml These are two independent reads on two different machines. They can drift out of sync, especially when: the two hosts were provisioned at different times, one host's system timezone changed after install, someone hand-edited an override file on one host but not the other, or an upgrade ran. Warning: Override files are never regenerated on upgrade. A timezone change on either host after initial install does not self-correct. Steps to Fix On the app host and the appliance host, confirm what /etc/localtime resolves to: readlink -f /etc/localtime On each host, open its override file and check the TIMEZONE: value: App host: docker-compose.override.yml Appliance host: appliance-docker-compose.override.yml Make the two TIMEZONE values match. Edit whichever file is stale or incorrect so both hosts declare the same zone (for example, America/New_York). Recreate the affected containers on whichever host you edited, so the new environment variable and the /etc/localtime bind-mount take effect: docker compose up -d --force-recreate Run this on the host whose override file you changed. If both files were wrong, run it on both hosts. Note: There is no way to manually clear the error or force the check to re-run. The check runs only as part of the full nightly invoice.php cron job. It writes its result to the appliance record, and the admin dashboard shows that result on next page load. There is no admin "run now" button, CLI flag, or reset action. After you make the config change above, wait for the next scheduled nightly run to confirm the error clears.