If you're reading this article, chances are you have a Drupal installation where a module or handful of modules keep getting disabled on their own, automatically and at completely random times. I too have run into this (more than once) and decided to blog about it to get a little more exposure on how to possibly fix it.
In my most recent situation, I upgraded a site from Drupal 6 to Drupal 7. Everything went smooth, no errors and all was good with the site. But a day later, I received a phone call from the client saying that the contact form wasn't there. Thinking they didn't know what they were talking about, I went and checked and sure enough, the contact form was gone. I was using the webform module for the contact form and went investigating. What I found was that the webform module was disabled. I thought it was weird, but I chalked it up as "forgetting to enable it" or something like that and simply re-enabled it and moved on. A few days later, another phone call with the same problem. That's when I knew there was something else going on and dove into the Google search trenches.
I ran across an issue on the d.o queue that I ended up dismissing initially:
Turns out, I should have paid more attention to this...
See, when I updated from D6 -> D7, I did all of my staging outside of the production folder. Good practice I suppose? Well, when it was time to move from staging to production, I changed the staging database over to the live and copied the folder structure from staging -> production. In my excitement of making sure the live site was hunky-dory, I completely disregarded the staging site. I mean, it wasn't being used on a live domain, right??
Well, that's where the problem lies. There are now two folder structures pointing to the same database. On the live site, I upgraded the webform module to 4.0-alpha-1 and the staging still had webform-3.19. When cron would run which updates bootstrap and tells the database where all of the files are located, it kept looking at the old location for the webform module because it technically was still there. (Sounds good in theory...) And since the modules were different between the two folder structures, it would disable it.
So, long story short, if you have a site where a module keeps getting disabled on it's own, automatically, chances are you have the live site and you also have a staging site, that both share the same database.
NOTE: I recommend flushing all of your caches on the live site, after you get rid of the staging site. This will help ensure that the database get's updated with the proper location of the module locations.