Members not expiring when EOT passes

S2Member Pro with Stripe payments. In the past two to four weeks, it appears EOTs are not disappearing on expiration and member status stays active. Also, no expiration notice is sent out but I think it’s that the members just don’t expire. I need help and can’t figure this out. Any known issues or ideas on where to go? I’m not a real developer but do know how to add snippets if it’s not too complicated.

Hi Steve.

Maybe it’s related to this? EOT Downgrades No Longer Working- PLS HELP!

Could you check if your EOT is still enabled or not? WP Admin > s2Member > Stripe Options > Auto EOT Behavior

Thanks :slight_smile:

It was not but also it was not disabled. It was blank. I can’t imagine how this occurred. I switched it back on and I assume I’ll have to find any EOTs that are earlier than the current day and process those manually. There are roughly 15 so not too much to chase after. This must have happened in the last month or two.

1 Like

I recently had this issue when I moved hosts. I had disabled the default cron and set up a server cron with that host years prior, but I forgot about it when I moved hosts and I didn’t get EOTs for months, but never knew. I realized it when a user wanted a brief access extension to finish a course managed by s2 that had expired months prior. I normally give brief free extensions to finish, but when I went to do that I saw that access was still there. It took a while to track down that it was a cron setting and code in wp-config.php that was specific to a host.

It might not be your concern, but I wanted to post this for others in the future.

1 Like

it’s never showing disabled but goes blank instead (and cron job missing/deleted). It’s much less common with current versions of s2member than with old versions (used to get disabled for me like every 2-6 months (still happens with my Optimizemember version which doesn’t include all the updates s2member got) - but now only happens every 12-15 months or so for me).

1 Like

I wonder if there’s some plugin removing the cron for some reason… If there is, it’d likely be an optimization plugin, I guess.

Could you guys list what optimizations you have implemented on the sites with this behavior? Maybe we can spot some in common.


If the EOT time is set, and s2’s EOT engine enabled, then it’ll get to them and process users with EOT times in the past.

One thing you can do, if you feel it takes your site long to get to them, is increase the number of users processed each round… E.g.

// Increase per process SQL records scanned for EOT
add_filter('ws_plugin__s2member_auto_eot_system_per_process', 'eot_per_process');
add_filter('ws_plugin__s2member_pro_eot_reminders_per_process', 'eot_per_process');
function eot_per_process() {
	$per_process = 30;
	return $per_process;


My error was literally a wp-config setting that disabled cron combined with a real cron that didn’t work on the new host. Not a plugin’s fault. 100% me.

1 Like

Thank you for the update! I’m sure it will help someone in the future. :slight_smile: