My customer has 8 users that they would like to ring in a linear fashion so every call starts with the same phone and goes through the list. (user 1, user 2, user 3, user 4, user 5, user 6, user 8, user 8) This works great when the agents are static, however the customer would like to be able to log off agents so calls do not ring a phone that does not have a user attending it. I do not see a ring strategy that will achieve both of these requests. Currently I have assigned an asterisk penalty to make this work with dynamic agents but if an agent is logged in and misses the call it will not move to the next penalty user.
The only way is with Agent Penalties as you concluded. VQ Plus which is a commercial module for FreePBX Distro has a feature called Skip Lazy Members that when enabled in a queue does what you want where it will call user1, if user1 is logged in but does not answer the call it marks them as lazy which allows asterisk to now try user2 which has a higher penalty. Once the call is answered or the caller has cycled through all the agents it resets the lazy state of the members and restarts the process.