diff --git a/README.md b/README.md
index 7a1121b..2597bc7 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ If you are interested, [check out](https://hub.docker.com/r/crazymax/) my other
* Run as non-root user
* Multi-platform image
-* [Dispatcher service](doc/docker/environment-variables.md#dispatcher-service) or legacy [cron](doc/docker/environment-variables.md#cron-legacy) as "sidecar" containers
+* [Dispatcher service](doc/docker/environment-variables.md#dispatcher-service) as "sidecar" container
* Syslog-ng support through a ["sidecar" container](doc/docker/environment-variables.md#syslog-ng)
* Ability to configure [distributed polling](https://docs.librenms.org/Extensions/Distributed-Poller/)
* Built-in LibreNMS [Weathermap plugin](https://docs.librenms.org/Extensions/Weathermap/)
@@ -66,7 +66,6 @@ Image: librenms/librenms:latest
* [LNMS command](doc/notes/lnms-command.md)
* [Validate](doc/notes/validate.md)
* [Dispatcher service](doc/notes/dispatcher-service.md)
- * [Cron (legacy)](doc/notes/cron.md)
* [Syslog-ng](doc/notes/syslog-ng.md)
* [Additional Monitoring plugins (Nagios)](doc/notes/additional-monitoring-plugins.md)
* [Upgrade](doc/upgrade.md)
diff --git a/doc/docker/environment-variables.md b/doc/docker/environment-variables.md
index 8de0c04..018141f 100644
--- a/doc/docker/environment-variables.md
+++ b/doc/docker/environment-variables.md
@@ -37,25 +37,6 @@
* `REDIS_PASSWORD`: Redis password
* `REDIS_DB`: Redis database (default `0`)
-### Cron (legacy)
-
-> :warning: Only used if you enable and run a [sidecar cron container](../notes/cron.md)
-
-* `SIDECAR_CRON`: Set to `1` to enable sidecar cron mode for this container (default `0`)
-* `LIBRENMS_CRON_DISCOVERY_ENABLE`: Enable LibreNMS discovery for this container cronjobs (default `true`)
-* `LIBRENMS_CRON_DISCOVERY_WRAPPER_WORKERS`: Spawn multiple discovery.php processes in parallel (default `1`)
-* `LIBRENMS_CRON_DAILY_ENABLE`: Enable LibreNMS daily script for this container cronjobs (default `true`)
-* `LIBRENMS_CRON_ALERTS_ENABLE`: Enable LibreNMS alerts generation for this container cronjobs (default `true`)
-* `LIBRENMS_CRON_BILLING_ENABLE`: Enable LibreNMS billing polling for this container cronjobs (default `true`)
-* `LIBRENMS_CRON_BILLING_CALCULATE_ENABLE`: Enable LibreNMS billing for this container cronjobs (default `true`)
-* `LIBRENMS_CRON_CHECK_SERVICES_ENABLE`: Enable LibreNMS service checks for this container cronjobs (default `true`)
-* `LIBRENMS_CRON_POLLER_ENABLE`: Enable LibreNMS polling for this container cronjobs (default `true`)
-* `LIBRENMS_CRON_SNMPSCAN_ENABLE`: Enable LibreNMS SNMP network scanning for this container cronjobs (default `false`)
-* `LIBRENMS_CRON_SNMPSCAN_INTERVAL`: SNMP network scanning cron interval (daily, in "Minute Hour", default `5 0`)
-* `LIBRENMS_CRON_SNMPSCAN_NETS`: Networks to scan for SNMP network scanning, in CIDR notation. Multiple networks can be specified separated by a comma. If this is not set the default is to scan networks defined in `$config['nets']`
-* `LIBRENMS_CRON_SNMPSCAN_THREADS`: SNMP network scanning threads to use (default `32`)
-* `LIBRENMS_CRON_SNMPSCAN_LOGFILE`: SNMP network scanning cron log file (default `/dev/null`)
-
### Distributed Poller
* `LIBRENMS_POLLER_THREADS`: Threads that `poller-wrapper.py` runs (default `16`)
diff --git a/doc/notes/cron.md b/doc/notes/cron.md
deleted file mode 100644
index ab40d91..0000000
--- a/doc/notes/cron.md
+++ /dev/null
@@ -1,16 +0,0 @@
-## Cron (legacy)
-
-If you want to enable the old crons, you have to run a "sidecar" container (see cron service in [docker-compose.yml](../../examples/compose-legacy/docker-compose.yml) example) or run a simple container like this :
-
-```bash
-docker run -d --name librenms_cron \
- --env-file $(pwd)/librenms.env \
- -e SIDECAR_CRON=1 \
- -v librenms:/data \
- librenms/librenms:latest
-```
-
-> `-v librenms:/data`
-> :warning: `librenms` must be a valid volume already attached to a LibreNMS container
-
-> :no_entry: Can't be used with [sidecar dispatcher container](dispatcher-service.md).
diff --git a/doc/notes/dispatcher-service.md b/doc/notes/dispatcher-service.md
index d34c4cb..c833a74 100644
--- a/doc/notes/dispatcher-service.md
+++ b/doc/notes/dispatcher-service.md
@@ -12,5 +12,3 @@ docker run -d --name librenms_dispatcher \
> `-v librenms:/data`
> :warning: `librenms` must be a valid volume already attached to a LibreNMS container
-
-> :no_entry: Can't be used with [sidecar cron container](cron.md).
diff --git a/examples/compose-legacy/.env b/examples/compose-legacy/.env
deleted file mode 100644
index d6c0aed..0000000
--- a/examples/compose-legacy/.env
+++ /dev/null
@@ -1,7 +0,0 @@
-TZ=Europe/Paris
-PUID=1000
-PGID=1000
-
-MYSQL_DATABASE=librenms
-MYSQL_USER=librenms
-MYSQL_PASSWORD=asupersecretpassword
diff --git a/examples/compose-legacy/docker-compose.yml b/examples/compose-legacy/docker-compose.yml
deleted file mode 100644
index ca43975..0000000
--- a/examples/compose-legacy/docker-compose.yml
+++ /dev/null
@@ -1,134 +0,0 @@
-version: "3.5"
-
-services:
- db:
- image: mariadb:10.4
- container_name: librenms_db
- command:
- - "mysqld"
- - "--innodb-file-per-table=1"
- - "--lower-case-table-names=0"
- - "--character-set-server=utf8"
- - "--collation-server=utf8_unicode_ci"
- volumes:
- - "./db:/var/lib/mysql"
- environment:
- - "TZ=${TZ}"
- - "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
- - "MYSQL_DATABASE=${MYSQL_DATABASE}"
- - "MYSQL_USER=${MYSQL_USER}"
- - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
- restart: always
-
- memcached:
- image: memcached:alpine
- container_name: librenms_memcached
- environment:
- - "TZ=${TZ}"
- restart: always
-
- rrdcached:
- image: crazymax/rrdcached
- container_name: librenms_rrdcached
- volumes:
- - "./librenms/rrd:/data/db"
- - "./rrd-journal:/data/journal"
- environment:
- - "TZ=${TZ}"
- - "PUID=${PUID}"
- - "PGID=${PGID}"
- - "LOG_LEVEL=LOG_INFO"
- - "WRITE_TIMEOUT=1800"
- - "WRITE_JITTER=1800"
- - "WRITE_THREADS=4"
- - "FLUSH_DEAD_DATA_INTERVAL=3600"
- restart: always
-
- msmtpd:
- image: crazymax/msmtpd:latest
- container_name: librenms_msmtpd
- env_file:
- - "./msmtpd.env"
- restart: always
-
- librenms:
- image: librenms/librenms:latest
- container_name: librenms
- domainname: example.com
- hostname: librenms
- ports:
- - target: 8000
- published: 8000
- protocol: tcp
- depends_on:
- - db
- - memcached
- - rrdcached
- - msmtpd
- volumes:
- - "./librenms:/data"
- env_file:
- - "./librenms.env"
- environment:
- - "TZ=${TZ}"
- - "PUID=${PUID}"
- - "PGID=${PGID}"
- - "DB_HOST=db"
- - "DB_NAME=${MYSQL_DATABASE}"
- - "DB_USER=${MYSQL_USER}"
- - "DB_PASSWORD=${MYSQL_PASSWORD}"
- - "DB_TIMEOUT=60"
- restart: always
-
- cron:
- image: librenms/librenms:latest
- container_name: librenms_cron
- domainname: example.com
- hostname: librenms
- depends_on:
- - librenms
- volumes:
- - "./librenms:/data"
- env_file:
- - "./librenms.env"
- environment:
- - "TZ=${TZ}"
- - "PUID=${PUID}"
- - "PGID=${PGID}"
- - "DB_HOST=db"
- - "DB_NAME=${MYSQL_DATABASE}"
- - "DB_USER=${MYSQL_USER}"
- - "DB_PASSWORD=${MYSQL_PASSWORD}"
- - "DB_TIMEOUT=60"
- - "SIDECAR_CRON=1"
- restart: always
-
- syslog-ng:
- image: librenms/librenms:latest
- container_name: librenms_syslog
- domainname: example.com
- hostname: librenms
- depends_on:
- - librenms
- ports:
- - target: 514
- published: 514
- protocol: tcp
- - target: 514
- published: 514
- protocol: udp
- volumes:
- - "./librenms:/data"
- env_file:
- - "./librenms.env"
- environment:
- - "TZ=${TZ}"
- - "PUID=${PUID}"
- - "PGID=${PGID}"
- - "DB_HOST=db"
- - "DB_NAME=${MYSQL_DATABASE}"
- - "DB_USER=${MYSQL_USER}"
- - "DB_PASSWORD=${MYSQL_PASSWORD}"
- - "DB_TIMEOUT=60"
- - "SIDECAR_SYSLOGNG=1"
- restart: always
diff --git a/examples/compose-legacy/librenms.env b/examples/compose-legacy/librenms.env
deleted file mode 100644
index e9b8a8d..0000000
--- a/examples/compose-legacy/librenms.env
+++ /dev/null
@@ -1,29 +0,0 @@
-MEMORY_LIMIT=256M
-UPLOAD_MAX_SIZE=16M
-OPCACHE_MEM_SIZE=128
-REAL_IP_FROM=0.0.0.0/32
-REAL_IP_HEADER=X-Forwarded-For
-LOG_IP_VAR=remote_addr
-
-LIBRENMS_POLLER_THREADS=16
-LIBRENMS_POLLER_INTERVAL=5
-
-LIBRENMS_CRON_DISCOVERY_ENABLE=true
-LIBRENMS_CRON_DAILY_ENABLE=true
-LIBRENMS_CRON_ALERTS_ENABLE=true
-LIBRENMS_CRON_BILLING_ENABLE=true
-LIBRENMS_CRON_BILLING_CALCULATE_ENABLE=true
-LIBRENMS_CRON_CHECK_SERVICES_ENABLE=true
-LIBRENMS_CRON_POLLER_ENABLE=true
-LIBRENMS_CRON_SNMPSCAN_ENABLE=true
-LIBRENMS_CRON_SNMPSCAN_NETS=192.168.0.0/24,192.168.1.0/24
-LIBRENMS_CRON_SNMPSCAN_LOGFILE=/data/logs/snmp-scan.log
-
-LIBRENMS_SNMP_COMMUNITY=librenmsdocker
-MEMCACHED_HOST=memcached
-MEMCACHED_PORT=11211
-RRDCACHED_HOST=rrdcached
-RRDCACHED_PORT=42217
-
-LIBRENMS_WEATHERMAP=false
-LIBRENMS_WEATHERMAP_SCHEDULE=*/5 * * * *
diff --git a/examples/compose-legacy/msmtpd.env b/examples/compose-legacy/msmtpd.env
deleted file mode 100644
index 170bec9..0000000
--- a/examples/compose-legacy/msmtpd.env
+++ /dev/null
@@ -1,10 +0,0 @@
-# https://github.com/crazy-max/docker-msmtpd
-SMTP_HOST=smtp.gmail.com
-SMTP_PORT=587
-SMTP_TLS=on
-SMTP_STARTTLS=on
-SMTP_TLS_CHECKCERT=on
-SMTP_AUTH=on
-SMTP_USER=foo
-SMTP_PASSWORD=bar
-SMTP_FROM=foo@gmail.com
diff --git a/rootfs/etc/cont-init.d/04-svc-main.sh b/rootfs/etc/cont-init.d/04-svc-main.sh
index fe332cb..a1861b2 100644
--- a/rootfs/etc/cont-init.d/04-svc-main.sh
+++ b/rootfs/etc/cont-init.d/04-svc-main.sh
@@ -28,11 +28,10 @@ DB_NAME=${DB_NAME:-librenms}
DB_USER=${DB_USER:-librenms}
DB_TIMEOUT=${DB_TIMEOUT:-60}
-SIDECAR_CRON=${SIDECAR_CRON:-0}
SIDECAR_DISPATCHER=${SIDECAR_DISPATCHER:-0}
SIDECAR_SYSLOGNG=${SIDECAR_SYSLOGNG:-0}
-if [ "$SIDECAR_CRON" = "1" ] || [ "$SIDECAR_DISPATCHER" = "1" ] || [ "$SIDECAR_SYSLOGNG" = "1" ]; then
+if [ "$SIDECAR_DISPATCHER" = "1" ] || [ "$SIDECAR_SYSLOGNG" = "1" ]; then
exit 0
fi
diff --git a/rootfs/etc/cont-init.d/06-svc-cron.sh b/rootfs/etc/cont-init.d/06-svc-cron.sh
deleted file mode 100644
index 2a95e1d..0000000
--- a/rootfs/etc/cont-init.d/06-svc-cron.sh
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/usr/bin/with-contenv sh
-
-CRONTAB_PATH="/var/spool/cron/crontabs"
-SIDECAR_CRON=${SIDECAR_CRON:-0}
-
-LIBRENMS_POLLER_THREADS=${LIBRENMS_POLLER_THREADS:-16}
-LIBRENMS_POLLER_INTERVAL=${LIBRENMS_POLLER_INTERVAL:-5}
-
-LIBRENMS_CRON_DISCOVERY_ENABLE=${LIBRENMS_CRON_DISCOVERY_ENABLE:-true}
-LIBRENMS_CRON_DISCOVERY_WRAPPER_WORKERS=${LIBRENMS_CRON_DISCOVERY_WRAPPER_WORKERS:-1}
-LIBRENMS_CRON_DAILY_ENABLE=${LIBRENMS_CRON_DAILY_ENABLE:-true}
-LIBRENMS_CRON_ALERTS_ENABLE=${LIBRENMS_CRON_ALERTS_ENABLE:-true}
-LIBRENMS_CRON_BILLING_ENABLE=${LIBRENMS_CRON_BILLING_ENABLE:-true}
-LIBRENMS_CRON_BILLING_CALCULATE_ENABLE=${LIBRENMS_CRON_BILLING_CALCULATE_ENABLE:-true}
-LIBRENMS_CRON_CHECK_SERVICES_ENABLE=${LIBRENMS_CRON_CHECK_SERVICES_ENABLE:-true}
-LIBRENMS_CRON_POLLER_ENABLE=${LIBRENMS_CRON_POLLER_ENABLE:-true}
-LIBRENMS_CRON_SNMPSCAN_ENABLE=${LIBRENMS_CRON_SNMPSCAN_ENABLE:-false}
-LIBRENMS_CRON_SNMPSCAN_INTERVAL=${LIBRENMS_CRON_SNMPSCAN_INTERVAL:-"5 0"}
-LIBRENMS_CRON_SNMPSCAN_NETS=${LIBRENMS_CRON_SNMPSCAN_NETS:-""}
-LIBRENMS_CRON_SNMPSCAN_NETS=${LIBRENMS_CRON_SNMPSCAN_NETS:+",$LIBRENMS_CRON_SNMPSCAN_NETS"}
-LIBRENMS_CRON_SNMPSCAN_NETS=${LIBRENMS_CRON_SNMPSCAN_NETS//,/ -r }
-LIBRENMS_CRON_SNMPSCAN_THREADS=${LIBRENMS_CRON_SNMPSCAN_THREADS:-32}
-LIBRENMS_CRON_SNMPSCAN_LOGFILE=${LIBRENMS_CRON_SNMPSCAN_LOGFILE:-/dev/null}
-
-# Continue only if sidecar cron container
-if [ "$SIDECAR_CRON" != "1" ]; then
- exit 0
-fi
-
-echo ">>> WARNING: Sidecar cron container is deprecated and will be removed soon."
-echo ">>> Please switch to the dispatcher service."
-echo ">>> https://github.com/librenms/docker/blob/master/doc/notes/dispatcher-service.md"
-
-rm -rf ${CRONTAB_PATH}
-mkdir -m 0644 -p ${CRONTAB_PATH}
-touch ${CRONTAB_PATH}/librenms
-
-# Add crontab
-cat "${LIBRENMS_PATH}/librenms.nonroot.cron" > ${CRONTAB_PATH}/librenms
-sed -i -e "s/ librenms //" ${CRONTAB_PATH}/librenms
-
-if [ "$LIBRENMS_CRON_DISCOVERY_ENABLE" != "true" ]; then
- echo "Disable discovery cron"
- sed -i "/discovery-wrapper.py/d" ${CRONTAB_PATH}/librenms
- sed -i "/discovery.php/d" ${CRONTAB_PATH}/librenms
-else
- echo "Enable discovery cron"
- sed -i -e "s/discovery-wrapper.py 1/discovery-wrapper.py ${LIBRENMS_CRON_DISCOVERY_WRAPPER_WORKERS}/" ${CRONTAB_PATH}/librenms
-fi
-
-if [ "$LIBRENMS_CRON_DAILY_ENABLE" != "true" ]; then
- echo "Disable daily script cron"
- sed -i "/daily.sh/d" ${CRONTAB_PATH}/librenms
-else
- echo "Enable daily script cron"
-fi
-
-if [ "$LIBRENMS_CRON_ALERTS_ENABLE" != "true" ]; then
- echo "Disable alerts generation cron"
- sed -i "/alerts.php/d" ${CRONTAB_PATH}/librenms
-else
- echo "Enable alerts generation cron"
-fi
-
-if [ "$LIBRENMS_CRON_BILLING_ENABLE" != "true" ]; then
- echo "Disable billing polling cron"
- sed -i "/poll-billing.php/d" ${CRONTAB_PATH}/librenms
-else
- echo "Enable billing polling cron"
-fi
-
-if [ "$LIBRENMS_CRON_BILLING_CALCULATE_ENABLE" != "true" ]; then
- echo "Disable billing cron"
- sed -i "/billing-calculate.php/d" ${CRONTAB_PATH}/librenms
-else
- echo "Enable billing cron"
-fi
-
-if [ "$LIBRENMS_CRON_CHECK_SERVICES_ENABLE" != "true" ]; then
- echo "Disable service checks cron"
- sed -i "/check-services.php/d" ${CRONTAB_PATH}/librenms
-else
- echo "Enable service checks cron"
-fi
-
-sed -i "/poller-wrapper.py/d" ${CRONTAB_PATH}/librenms
-if [ "$LIBRENMS_CRON_POLLER_ENABLE" = "true" ]; then
- echo "Enable polling cron"
- cat >> ${CRONTAB_PATH}/librenms <> ${CRONTAB_PATH}/librenms <> ${LIBRENMS_CRON_SNMPSCAN_LOGFILE} 2>&1
-EOL
-else
- echo "Disable snmp-scan cron"
-fi
-
-# Fix perms
-echo "Fixing crontabs permissions..."
-chmod -R 0644 ${CRONTAB_PATH}
-
-# Create service
-mkdir -p /etc/services.d/cron
-cat > /etc/services.d/cron/run <