Best practice for automatically making content live at a certain date AND removing the content after a certain "stale"/Expired date?

I have a requirement to publish content items (not a web page) monthly. There should always be one, and only one version of each content item live. What is the best approach for automatically making content live (so long as it is published) and importantly, removing it automatically after a certain "stale"/end date?

I have played with publish start and end dates, but they seem to still require manual intervention to unpublish an item at the end of the month. The Lifetime fields seemed promising, but again don't seem to automatically hide a version. I can't find any documentation around the Lifetime fields either.

  • Note the documentation for this is out of date. If you have two content delivery servers, it is important that you name the agents. Also note the name mode name has changed in Sitecore 9 as well, you must use "(full or smart or incremental)" or it won't patch your file correctly. You can check that yourt patch file is updated correctly here by going to: localhost/.../ShowConfig.aspx

    <configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
    <sitecore>
    <scheduling>
    <!-- The time format is "HH:MM:SS" -->
    <agent name="publishagent-web" type="Sitecore.Tasks.PublishAgent" method="Run" interval="00:05:00">
    <param desc="source database">master</param>
    <param desc="target database">web</param>
    <param desc="mode (full or smart or incremental)">smart</param>
    <param desc="languages">en, es, zh, nl, it, de, pt, ja, fr</param>
    </agent>
    </scheduling>
    <scheduling>
    <!-- The time format is "HH:MM:SS" -->
    <agent name="publishagent-web2" type="Sitecore.Tasks.PublishAgent" method="Run" interval="00:05:00">
    <param desc="source database">master</param>
    <param desc="target database">web2</param>
    <param desc="mode (full or smart or incremental)">smart</param>
    <param desc="languages">en, es, zh, nl, it, de, pt, ja, fr</param>
    </agent>
    </scheduling>
    </sitecore>
    </configuration>