Unable to run at proper timezone. I want to run two things

  1. bash scripts
  2. Stored procedure

For both case I found it runs at the wrong time. Instead of 1 AM and 3 AM pg_cron runs at a different time. Why could that be? At PostgreSQL timezone +6 pg_cron log also show that it runs at +6 timezone but actually it runs at 9PM (21:00). How actually pg_cron get that time?

SELECT cron.schedule('00 15 * * * ','/main/backup/archive.sh');

SELECT cron.schedule('00 15 * * *', $$ call archiver( 10, 'tbl_main','tbl_archiver')$$); 

Note: Though I found syntax error for script running but it is not main issue for me.

1 Answer 1


I had the same problem with pg_cron version 1.4.2. I tried different combinations, setting the time zone in the config file, reinstalling the extension and reloading the database. After upgrading to version 1.5.1 pg_cron_15-1.5.1-1.rhel7.x86_64, jobs run normally, according to the timezone set in the config file.


cron.timezone = 'Europe/Moscow'

[root@demo-db ~]# yum update pg_cron_15.x86_64
.... cut ........
    Running transaction
  Updating   : pg_cron_15-1.5.1-1.rhel7.x86_64                                                                                                                                              1/2
  Cleanup    : pg_cron_15-1.4.2-1.rhel7.x86_64                                                                                                                                              2/2
  Verifying  : pg_cron_15-1.5.1-1.rhel7.x86_64                                                                                                                                              1/2
  Verifying  : pg_cron_15-1.4.2-1.rhel7.x86_64                                                                                                                                              2/2

  pg_cron_15.x86_64 0:1.5.1-1.rhel7

-bash-4.2$ psql -d db_stroy -U postgres
psql (15.2)
Type "help" for help.

db_stroy=# DROP EXTENSION IF EXISTS pg_cron;

[root@demo-db ~]# systemctl stop  postgresql-15.service
[root@demo-db ~]# systemctl start  postgresql-15.service
[root@demo-db ~]# systemctl status  postgresql-15.service
● postgresql-15.service - PostgreSQL 15 database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql-15.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-03-24 07:53:13 MSK; 1s ago
     Docs: https://www.postgresql.org/docs/15/static/
  Process: 29027 ExecStartPre=/usr/pgsql-15/bin/postgresql-15-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
 Main PID: 29033 (postmaster)
   CGroup: /system.slice/postgresql-15.service
           ├─29033 /usr/pgsql-15/bin/postmaster -D /var/lib/pgsql/15/stroy/
           ├─29035 postgres: logger
           ├─29036 postgres: checkpointer
           ├─29037 postgres: background writer
           ├─29039 postgres: walwriter
           ├─29040 postgres: autovacuum launcher
           ├─29041 postgres: pg_cron launcher
           └─29042 postgres: logical replication launcher

[root@demo-db ~]# su - postgres
Last login: Fri Mar 24 07:43:25 MSK 2023 on pts/2
-bash-4.2$ psql -d db_stroy -U postgres
psql (15.2)
Type "help" for help.

db_stroy=# GRANT ALL ON TABLE cron.job TO str;
db_stroy=# GRANT SELECT, USAGE, UPDATE ON SEQUENCE cron.jobid_seq TO str;
db_stroy=# GRANT USAGE ON SCHEMA cron TO str;

SELECT cron.schedule('test msk3', '58 07 * * *', 'select 1');

select * from cron.job_run_details  

jobid   runid   job_pid "database"  username    command status  return_message  start_time                    end_time
1          1    29099    db_str     str     select 1    succeeded   1 row   2023-03-24 07:58:00.007 +0300   2023-03-24 07:58:00.008 +0300

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.