A client submitted documents for a deadline three hours ago. The upload appeared to succeed — no error message on screen — but your ProjectSend server's PHP upload handler had silently failed midway through. The files never landed. The submission window closed. The deal was on the line.
ProjectSend is a free, open-source file sharing and client portal application built on PHP and MySQL. It lets businesses securely share files with clients, manage upload permissions, and send automated notifications — a self-hosted alternative to Dropbox Business or WeTransfer for teams that need control over their data. But self-hosting means you're responsible for catching silent failures. Vigilmon gives you external HTTP monitors, keyword checks, SSL alerts, and heartbeat monitoring that cover every failure mode ProjectSend exposes.
This tutorial walks you through complete ProjectSend monitoring with Vigilmon.
What You'll Build
- An HTTP monitor on the ProjectSend login/home page (web UI availability)
- An HTTP monitor on the
/process/endpoint (upload API handler health) - A keyword monitor confirming PHP upload functionality is intact
- SSL certificate expiry alerts for HTTPS ProjectSend deployments
- A heartbeat monitor for cron-driven notification tasks (upload alerts, expiry notifications)
Prerequisites
- A running ProjectSend instance (self-hosted, r1295+ recommended)
- A free account at vigilmon.online
Step 1: Monitor the ProjectSend Login and Home Page
The ProjectSend login page is the entry point for all users and clients. A non-200 response means no one can log in or upload files.
Test it:
curl -o /dev/null -s -w "%{http_code}" https://your-projectsend.example.com/login.php
Set up the Vigilmon monitor:
- Log in to Vigilmon and click New Monitor → HTTP.
- Set URL to
https://your-projectsend.example.com/login.php. - Set Check interval to 60 seconds.
- Set Expected status code to
200. - Under Advanced → Keyword check, add:
- Keyword present:
ProjectSend
- Keyword present:
- Save the monitor.
The keyword check ensures you're seeing a real ProjectSend page, not an Nginx error page or a blank 200 from a misconfigured PHP-FPM pool.
Step 2: Monitor the /process/ Upload Endpoint
ProjectSend routes file uploads and API actions through the /process/ directory. A GET request to this endpoint will not initiate an upload — but it confirms that the PHP handler is alive and reachable. A 404 or 500 here means uploads are broken even if the login page looks fine.
Test it:
curl -o /dev/null -s -w "%{http_code}" https://your-projectsend.example.com/process/
You'll typically receive a 200 (with a JSON error body about missing parameters) or a 302. Both confirm the endpoint is reachable.
Set up the Vigilmon monitor:
- Click New Monitor → HTTP in Vigilmon.
- Set URL to
https://your-projectsend.example.com/process/. - Set Check interval to 60 seconds.
- Under Advanced, set Expected status codes to
200,302(either confirms the handler is alive). - Save the monitor.
If PHP-FPM crashes or the /process/ directory becomes inaccessible due to a permissions change or web server misconfiguration, Vigilmon fires immediately.
Step 3: Keyword Monitor for PHP Upload Functionality
The login page loading correctly does not guarantee that PHP's file handling is intact. A missing PHP extension (e.g., fileinfo, gd) or an upload_max_filesize misconfiguration can break uploads while the UI remains visible. A keyword monitor on the index page catches PHP fatal errors that surface in the HTML output.
- Click New Monitor → HTTP in Vigilmon.
- Set URL to
https://your-projectsend.example.com/index.php(or the root — whichever serves the main portal). - Set Expected status code to
200. - Under Advanced → Keyword check, configure:
- Keyword present:
ProjectSend - Keyword absent:
Fatal error,Warning:,Parse error,500 Internal Server Error
- Keyword present:
- Save the monitor.
PHP warnings and fatal errors are often rendered directly in the HTML response with a 200 status code — the keyword monitor catches these invisible-to-status-code failures.
Step 4: SSL Certificate Monitoring
ProjectSend client portals handle confidential business documents. A lapsed SSL certificate doesn't just break HTTPS — it displays a browser security warning that immediately destroys client trust and prevents uploads. Self-managed Let's Encrypt certificates auto-renew, but renewal can fail silently.
Configure SSL alerting:
- Open the HTTP monitor from Step 1 (login page).
- Click Edit → Advanced → SSL Certificate.
- Set Alert when certificate expires in less than:
14 days. - Save.
Apply the same SSL alert to the /process/ endpoint monitor. Two monitors watching the same certificate from different paths ensures you won't miss a renewal failure due to a brief endpoint outage during the check.
Step 5: Heartbeat Monitor for Cron-Driven Notifications
ProjectSend sends automated notifications via cron-triggered PHP scripts — including alerts when new files are uploaded for a client and expiry alerts when download links are about to expire. These are typically configured as system cron entries like:
*/15 * * * * php /path/to/projectsend/cron.php >> /dev/null 2>&1
If this cron entry is removed, the cron daemon stops (e.g., after a server migration), or cron.php throws a fatal error, clients stop receiving notifications silently. The web UI continues working — only a heartbeat monitor catches this.
Set up a Vigilmon Heartbeat monitor:
- Click New Monitor → Heartbeat in Vigilmon.
- Give it a name like
ProjectSend Cron. - Set Expected interval to
15 minutes(matching your cron schedule). - Copy the generated heartbeat URL:
https://vigilmon.online/ping/<your-unique-token>. - Save the monitor.
Wire the heartbeat into your cron setup:
Replace your existing cron entry with a two-command chain:
*/15 * * * * php /path/to/projectsend/cron.php && curl -fsS -m 10 https://vigilmon.online/ping/<your-unique-token> > /dev/null 2>&1
The && ensures Vigilmon is only pinged if cron.php exits successfully. If the PHP script fails, no ping is sent, and Vigilmon fires an alert after the grace period.
Alternatively, if you want the heartbeat regardless of cron script exit code (to detect cron scheduling failures separately from script failures):
*/15 * * * * php /path/to/projectsend/cron.php >> /dev/null 2>&1
*/15 * * * * curl -fsS -m 10 https://vigilmon.online/ping/<your-unique-token> > /dev/null 2>&1
Choose based on whether you want to detect script errors or only scheduling failures.
Step 6: Alert Channels
Go to Notifications → New Channel in Vigilmon and configure:
- Email — direct alerts to your operations or IT team
- Webhook — post to Slack, Discord, or a ticketing system for tracked incidents
Example ProjectSend downtime alert:
🔴 DOWN: ProjectSend Login Page (your-projectsend.example.com)
Status: 500 Internal Server Error
Region: US-West
Triggered: 2026-05-14 11:07 UTC
Example heartbeat alert:
🔴 MISSING HEARTBEAT: ProjectSend Cron
Last ping received: 2 hours 3 minutes ago
Expected every: 15 minutes
Step 7: Status Page
Go to Status Pages → New Status Page in Vigilmon. Add all ProjectSend monitors and publish:
<a href="https://vigilmon.online/status/<your-slug>">
<img src="https://vigilmon.online/badge/<monitor-slug>" alt="ProjectSend Status" />
</a>
What You've Built
| Failure scenario | How Vigilmon catches it |
|---|---|
| Web server (Nginx/Apache) down | HTTP monitor on login.php detects non-200 |
| PHP-FPM crash | /process/ endpoint monitor detects 502/503 |
| MySQL connection failure | Keyword monitor catches DB error strings in HTML |
| PHP fatal error in upload handler | Keyword monitor catches Fatal error in response body |
| SSL certificate expiry | SSL alert fires 14 days before expiry |
| Upload endpoint inaccessible | /process/ monitor detects 404/500 |
| Cron daemon stopped | Heartbeat monitor fires when pings stop |
| Client notification emails not sending | Heartbeat monitor (cron) catches the failure |
ProjectSend gives clients a self-hosted portal they can trust with confidential files — but that trust depends on the system working reliably. Vigilmon watches your ProjectSend instance from outside your network, so you catch upload failures and cron outages before your clients do.
Start monitoring your ProjectSend instance today — register free at vigilmon.online.