Suppose a situation where you are with Magento under maintenance mode for, let's say, 30 minutes with the intention to run a MySQL backup or run some heavy database data synchronisation script. After looking at the code, I noticed that the following entry points will fail to run as we are in maintenance mode (which is a good thing):
cron.php (public web entry point).
...also API connections would fail as they all go through the \Magento\Framework\App\Bootstrap::run() and the \Magento\Framework\App\Bootstrap::assertMaintenance() methods.
However, ./bin/magento cron:run would still run, as the cli cron entry point doesn't check for maintenance mode. Please note the following steps:
vagrant@mage2:/vagrant/data/magento2$ ./bin/magento maintenance:enable
Enabled maintenance mode
vagrant@mage2:/vagrant/data/magento2$ ./bin/magento cron:run
Ran jobs by schedule.
This means that, even in maintenance mode, the crontab could still be firing database operations, and, depending on the Magento cronjob scheduled to be executed (or new custom cronjobs that were created), it could potentially trigger other heavy database operations to run in parallel with the database maintenance operations already being executed.
So, if you really need to stop all operations in your application for a brief period of time (a maintenance window), you would (a) not only put Magento in maintenance mode, but would also need to (b) deactivate the cron.
My conclusion based on the above is that it would make sense for at least the ./bin/magento cron:run command to check for the maintenance flag as well. This would be safer, and possibly assure that during maintenance mode there's nothing happening in the application.
Can you guys please point out if you share this opinion?