Cron job not running in production but running locally

I am attempting to run this job but it is not appearing to run in the logs, whereas it runs locally (every 5 minutes). The first line is a console log so regardless of the result, it should log something
job updateStaleTikTokStats {
executor: PgBoss,
perform: {
fn: import {updateStaleTikTokStats} from "@src/server/workers/updateStaleTikTokStats"
},
schedule: {
cron: "*/5 * * * *"
},
entities: [UnverifiedCreator, UnverifiedCreatorTikTokStats]
}
job updateStaleTikTokStats {
executor: PgBoss,
perform: {
fn: import {updateStaleTikTokStats} from "@src/server/workers/updateStaleTikTokStats"
},
schedule: {
cron: "*/5 * * * *"
},
entities: [UnverifiedCreator, UnverifiedCreatorTikTokStats]
}
8 Replies
kapa.ai
kapa.ai4d ago
Hi @CamBlackwood. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave: ---------------------- To address your issue with the cron job not running in production but working locally, let's consider a few potential reasons and solutions based on the information provided in the knowledge sources: 1. Heroku Deployment: If you're deploying to Heroku, you need to set an additional environment variable called PG_BOSS_NEW_OPTIONS. This is because pg-boss uses the pg extension, which doesn't connect to Heroku over SSL by default. Set the variable as follows:
PG_BOSS_NEW_OPTIONS={"connectionString":"<REGULAR_HEROKU_DATABASE_URL>","ssl":{"rejectUnauthorized":false}}
PG_BOSS_NEW_OPTIONS={"connectionString":"<REGULAR_HEROKU_DATABASE_URL>","ssl":{"rejectUnauthorized":false}}
Deploying Manually (https://wasp-lang.dev/docs/advanced/deployment/manually#deploy-to-a-heroku-app) provides more details on this. 2. Database Connection: Ensure that your database is running and accessible. The error message pg-boss failed to start! Error: connect ECONNREFUSED ::1:5432 suggests a connection issue. Double-check your database configuration and ensure it's properly set up in your production environment. 3. PostgreSQL Requirement: Verify that you're using PostgreSQL as your database system in production. Jobs with pg-boss executor require PostgreSQL. As mentioned in the Declaring Jobs documentation (https://wasp-lang.dev/docs/advanced/jobs#declaring-jobs), pg-boss requires your app.db.system to be PostgreSQL. 4. Logging: Ensure that your production environment is set up to capture and display logs properly. As mentioned in a Discord conversation, you should be able to see console.log statements from jobs in your production monitoring logs. 5. Job Schedule: The cron expression "*/5 * * * *" is correct for running every 5 minutes. However, make sure that your production server has been running for at least 5 minutes to see the first execution. 6. Job Configuration: Double-check that your job configuration in the production .wasp file matches exactly what you have locally. Any discrepancies in the job name, import path, or entity references could prevent the job from running. 7. Server Restart: If you've recently updated your job configuration, ensure that you've restarted your server in production to apply the changes. If none of these solutions resolve your issue, you may need to investigate further by checking your production logs for any error messages related to pg-boss or job execution. Additionally, you could try temporarily changing the cron schedule to run more frequently (e.g., every minute) to help with debugging. Remember, as mentioned in the pg-boss considerations (https://wasp-lang.dev/docs/advanced/jobs#pg-boss-considerations), Wasp starts pg-boss alongside your web server's application, where both are simultaneously operational. If you're not seeing any logs at all, it might indicate a more general issue with your production setup or logging configuration. ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @CamBlackwood, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
CamBlackwood
CamBlackwoodOP4d ago
@kapa.ai it's def deployed and has been running on the server for >15 minutes
kapa.ai
kapa.ai4d ago
Let me check the knowledge base for you again. One moment! :books: ---------------------- Thank you for providing that additional information. Since the job has been deployed and running on the server for more than 15 minutes, we can rule out the initial startup delay. Let's consider some other potential reasons why your cron job might not be running in production: 1. Database Connection: Even though your server is running, there might still be an issue with the database connection specifically for pg-boss. Double-check your database URL and ensure it's correctly set in your production environment variables. 2. PG_BOSS_NEW_OPTIONS: If you're using Heroku or a similar platform, make sure you've set the PG_BOSS_NEW_OPTIONS environment variable as mentioned in the Heroku deployment documentation (https://wasp-lang.dev/docs/advanced/deployment/manually#deploy-to-a-heroku-app). This is crucial for pg-boss to connect properly in some production environments. 3. Logging Configuration: Ensure that your production logging is set up correctly to capture pg-boss and job execution logs. You might need to adjust your log levels or log configuration to see these specific logs. 4. Job Table in Database: Check if the pg-boss job tables are created in your production database. You can do this by connecting to your production database and looking for tables in the pgboss schema. If these tables are missing, it might indicate that pg-boss failed to initialize properly. 5. Server Resources: Ensure that your production server has sufficient resources (CPU, memory) to run the scheduled jobs. Resource constraints could prevent jobs from executing. 6. Time Zone Settings: Verify that the server's time zone settings match your expectations. Cron schedules are typically based on the server's local time. 7. Job Conflicts: If you have multiple instances of your application running (e.g., in a scaled environment), ensure that you're not encountering job conflicts or duplicate executions. To further diagnose the issue, you could try the following: 1. Temporarily modify the job to run more frequently (e.g., every minute) and with a simple task (like logging a message) to see if it executes at all. 2. Check your production database, specifically the pgboss.job and pgboss.schedule tables, to see if your job is being registered and scheduled correctly. 3. If possible, enable more verbose logging for pg-boss in your production environment to get more insights into what's happening behind the scenes. If you're still unable to resolve the issue after trying these suggestions, you might need to dive deeper into your specific production setup or consider reaching out to the Wasp community for more tailored assistance. ---------------------- Note: you can ask me a follow up question by @ mentioning me again :speech_balloon: ---------------------- Sorry @CamBlackwood, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist: Perhaps try again in 15mins?
miho
miho4d ago
Hmhm, is the server not going to sleep because of inactivity?
CamBlackwood
CamBlackwoodOP4d ago
I guess it could be, how can I tell @miho ? oh hang on, it looks like it's running now 🤔 seems for some reason there was a delay in the first couple of executions
miho
miho4d ago
Check your fly-server.toml and see the min_machines_running value if it's 0 or 1?
CamBlackwood
CamBlackwoodOP4d ago
On the server it's 1 on the client it's 0 but I guess that isn't an issue
miho
miho4d ago
Yep, should be fine 👍 if you see any PgBoss errors in the server logs let me know
Want results from more Discord servers?
Add your server