s2Member not behaving in the way it suppose to

Happy new year to all.

I just realised yesterday that many members who had EOT scheduled by s2Member, were not demoted automatically to free subscribers, therefore, all those members had a "Free Pass’ to all premium content since November. I had to look into each member’s account manually, checking if their payments were actually cancelled on PayPal side, then, I demoted manually one by one to a free subscriber status.

Then, I also realised that for some reason, s2Member is not passing any API instructions to Getresponse to change lists once are demoted, so, I had to also move all those members manually to their respective lists.

Apparently this has been going on since Nov 2021.

What’s Going On?.

I’m a s2Member PRO customer since 2012 and I never had ANY similar situation till now. s2Member aways worked as expected.

But not now.

Is there ANY known similar case, or is it just my site?.

Is there any way we could diagnose what’s creating this issue?.

I’m attaching two screen captures done today 03/01/2022 to show how members having EOT scheduled on NOV, are still active at level_4. Also, some are from few days back, or even from yesterday.
s2Member is not demoting them automatically and I have to do it manually. Not to mention the getresponse part…

Could you please help?.

Thank you.

Hi! Open your url.com/?s2member_auto_eot_system_via_cron=1

Replace url.com with your own domain name, of course…

Do it every now and then, it should demote everybody that’s pending.

Sometimes you have to open that url more than once since it won’t process all records at once but stop after a certain number of records is processed.

Hey there thesimarchitect, thank you for your input.

My question is why I see this problem now after 11 years using s2Member?. I never did what you mention before.

Also, how do I deal with s2Member not passing information to getresponse to update at which list members should go to?.

Something happened with s2Member sometime in OCT or NOV and things are not working in the way it did before…

Any hint to that?. Thank you!!

Its a bug since years, from time to time the demotion Cron service depetes itself. Have to check regularly and reactivate it in the PayPal options but applies for all gateways.

1 Like

I just noticed it. I still have people able to access protected content with memberships that expired months ago. Thanks for pointing this out.

I sorted my users by EOT and manually changed the ones with an EOT of yesterday or earlier to Subscriber. The issue for me seems to date back to September 2021. Users before then were demoted automatically.

1 Like

Well, I’ve also had problem with one site around the same time period. I thought things stopped working when I added a 7th EOT Renewal Reminder Email. I reduced the number to 5 thinking there was a limit of 5 or 6 and email messages started going out again and after a few hours those who had expired were set to subscribers. Perhaps I unstuck the cron by doing something to get it running again. With 18,000 members it doesn’t take much to have a small problem become large quickly.

I frequently export the s2Member list to a FileMaker Pro database I’ve made to make reports and tests not available within s2Member. I added a test for expired records that weren’t correct and found over 700. The next day the cron fixed every record and we were back to normal.


When I check my cron events, it shows “ws_plugin__s2member_auto_eot_system__schedule” running every 10 minutes. But it doesn’t seem to be accomplishing anything when it runs.

Would adding “/?s2member_auto_eot_system_via_cron=1” to the end of my URL make any difference?

You open your url with that termination in your browser, manually, to manually run the EOT task from your computer at the time you do it.

It’s more of a test/temporary fix until you get your cron tasks fixed.

Also handy if you set users to expire and you don’t want to wait for the next cron to run.

Sorry, I do understand how to run the command in the browser. I just can’t figure out why my cron events show the s2member Auto EOT event running every 10 minutes and yet it’s not actually doing anything. Which is why I’m wondering if running the command manually in the browser would have any effect.

Update: It looks like it may have started working again. I just noticed that s2Member demoted the accounts that expired today. Have to keep an eye on it I guess.

Its only demoting one or a certain per run afaik. So for 700 needs many runs.
And it’s a pita that it so often deactivates itself. At least once per year for me.

There’s a fix for that, you add the php instructions below using a plugin that lets you add your own plugin or you create a php file and you create a php with them (adjust the number according to what you believe will work best):

// Increase per process SQL records scanned for EOT Reminder Emails

add_filter('ws_plugin__s2member_auto_eot_system_per_process', 's2_eots_per_process');
add_filter('ws_plugin__s2member_pro_eot_reminders_per_process', 's2_eots_per_process');
function s2_eots_per_process() {
    return 500;

Sometimes Wordpress’s Cron glitches.

Sometimes even your server cron’s glitch (I know mine does because I use cloudflare).

I never had a glitch except for the s2member Cron.
Could you write a plugin that reinstates the s2member Cron job once a day?

I am running into the same problem. Can you please elaborate on how you would “Open” the domain/?s2member_auto_eot_system_via_cron=1? Where would you do this and what action would need to be done “every now and then”?


Just open your website in your browser as you normally would. Then add “/?s2member_auto_eot_system_via_cron=1” (without the quotes) after the “.com” and press Enter to run it.

1 Like

For those that have access wouldn’t it make sense to add a daily cron job?

1 Like

I don’t know how to write such a Cron job. How can you write a Cron job that inserts another cron Job? Also maybe this is not possible as it would be s security risk?

There are many plugins letting you fiddle with Cron jobs, so most people should be able to do it.

1 Like

I use a plugin called WP Crontrol which not only lets you see the scheduled cron events but also gives you a Run Now option for each one. I clicked Run Now for s2Member’s Auto EOT job a couple of days ago and it has been working fine ever since.

1 Like

I use that plugin too, if the Cron job is not starting, that’s a different problem. Not related to S2. The problem is that S2 is deleting the Cron job from time to time. So you need to insert a new Cron job, or inside the PayPal options set the auto demotion to on again. If the Cron is missing it will be blank.

Cron job needs someone to visit the site from time to time. But that is not a problem. If no-one visits your site it doesn’t matter if accounts are denoted or not.

There needs to be a plugin or another cron job restoring the missing/deleted Cron job from time to time. I never lost any other Cron job. This is a very old (since beginning?) Bug in s2 member

1 Like

My site gets tons of traffic so “no one visits” would not have been the issue. I did re-save the Automatic EOT Behavior options (even though they appeared to still be set correctly) so maybe that’s what caused it to start working again.

Seems strange, if this has indeed been a bug from day 1, that I’ve been using s2Member since 2012 yet this was the first time it stopped demoting expired memberships.

1 Like