Depending on how complex you want to make it....
I use a standard circuit for my doors, and use area triggers or green rails to "block off" pressing R to open them, so people have to use the button.
The circuit is:
Door blocks
░░↑░░░░
[NOT]
░░↑░░░░
[OR]←←←←←←←←←←←←←←←←←←←←←←←←←←←
░░↑░░░░░░░░░↑░░░░░░░░░↑░░░░░░░░░↑░░░░░░░░░↑░░░░░░░░░↑
[DELAY] → [DELAY] → [DELAY] → [DELAY] → [DELAY] → [DELAY]
░░↑░░░░
{button}
The button is "normally off" so the door is "normally closed" by the NOT inversion. Blocking of players ability to "press R" and manually open a door removes 95% of "door left open" problems. Adjust your delay chain to a suitable length for how long you want the door to stay open.
If logic breaks on the server (it happens) you can still interact with the doors by really ramming your nose into them, which allows you to activate them with R (the other 5%). You're SOL if you use it to control a rail door when logic breaks though, at least until server restart. (that's done by having the [OR] activate the "opening door" rail orientation, and the [NOT] activate the "closing door" rail orientation.)
If you're really set on having a ship wide door-reset, (I use this as a "security lock down") put another [OR] fed by the above [NOT] and a big chain of [activator]s run to every door on the ship (or just one hallway, segment by usage) that you use to "interrupt" the main door sequence.
That would look like:
Door blocks
░░↑░░░░
[OR]←[activator]
░░↑░░░░
[NOT]
░░↑░░░░
[OR]←←←←←←←←←←←←←←←←←←←←←←←←←←←
░░↑░░░░░░░░░↑░░░░░░░░░↑░░░░░░░░░↑░░░░░░░░░↑░░░░░░░░░↑
[DELAY] → [DELAY] → [DELAY] → [DELAY] → [DELAY] → [DELAY]
░░↑░░░░
{button}
AS long as the activator is "off" the door functions normally, if it's "on(blue)" the door is "locked" closed no matter what the primary circuit is doing. you can even use that to "shut the doors" that have been opened manually with "r" by turning the activator on, then off. The functions because (last I checked) an [OR] will send a NEW "on(blue)" signal down the chain, even if it's already "on" when it receives it, but does NOT send a false if one of the input signals goes "off(orange)" while another is still "on(blue)".
Slightly more "advanced" versions use the area triggers, or an activation gate, to open the door for you(like star trek, or your local supermarket's automated doors"). If you do this I recommend putting the area triggers or activation gate 2-3 blocks deep and away from the doors, to give logic time to start working. THis also requires a bit of fiddling with the {button} so it's set up like this:
{button}
[activator] ←[area trigger control]/[Activation gate controller]
Even if you don't use the area triggers to "block off" the door, this same circuit can be used to "trigger automatic close" a few seconds after someone trips them.
hope it helps