frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Avoid 2:00 and 3:00 am cron jobs (2013)

https://www.endpointdev.com/blog/2013/04/avoid-200-and-300-am-cron-jobs/
151•pera•2h ago

Comments

noir_lord•2h ago
I worked at a place that had set the servers to BST not UTC and used cron jobs extensively for reporting, which caused chaos twice a year and twice a year they had to explain to the business again why it caused chaos and ask for the time to fix it.

Company went bust before it got fixed.

Just use UTC folks unless you have a really good idea why you shouldn't.

lxgr•2h ago
"Our customers aren't in UTC" is often a compelling reason.

People generally expect things like usage limits to reset overnight, not at UTC midnight, and these are often implicitly tied to (the result of) batch jobs.

Financial jobs, including billing, is another big category.

latchkey•2h ago
Always set the servers to UTC. Convert the time to local time for display, but store in UTC.

The reporting job should be run from a server on UTC and on UTC time. The report itself can convert to whatever is local time.

gruez•2h ago
That doesn't fix the problem of "my quota reset (or reporting job) gets shifted by 1 hr when daylight saving time changes".
latchkey•2h ago
The reporting job should be run from a server on UTC and on UTC time. The report itself can convert to whatever is local time. This is exactly what I said above.
lxgr•1h ago
That works if all your consumers of the report are indifferent to it arriving at a different time half of the year.

All of yours might well be, but you can't generalize that assumption to every domain and scenario.

ipaddr•1h ago
If you want an email of the report to send out at 9am locally. Generate before and send to everyone based on timezone.
kjehjrktlhl•1h ago
You don’t want a report to include 25h or 23h twice a year just to be able to send it at some distinct local time.
lxgr•56m ago
I absolutely want some daily business reports to cover 25 hours on one day of the year and 23 on another, since that's how long a calendar day is in local time in every place that has DST shifts.
gruez•56m ago
> Generate before and send to everyone based on timezone.

How are you going to do this? Clearly cron (with timezone set to UTC) doesn't work for this so you'll need another system. In that case why not have that multi-time zone scheduling system run your script?

latchkey•1h ago
The report can run at whatever time you want it to run at. But this solution solves the issue of the report running 2x or not at all.
ranger_danger•1h ago
You could have the reset script check the timezone of the user before actually performing the reset, and have this script run at least once an hour to make sure you get close to accurate for most people (some timezones only differ by less than an hour though!).

But also, if the user can change the timezone themselves, now you have a condition where the user could keep their quota at bay for a very long time (if not forever) if they keep changing their timezone accordingly.

throwaway150•1h ago
> That doesn't fix the problem of "my quota reset (or reporting job) gets shifted by 1 hr when daylight saving time changes".

How hard is to convert the UTC time to user's local time and perform quota reset?

I mean you should be doing this anyway. Even if you store everything in PST or EST or CST, you never know when you'll get customers from another part of the world and then you'll have to do this anyway. So why not do this already?

lxgr•1h ago
> How hard is to convert the UTC time to user's local time and perform quota reset?

Probably roughly as hard as writing a timezone-aware scheduler that considers all edge cases around daylight savings time, i.e. probably possible but I'd try fairly hard to see if I can get around it.

One way of getting around it is to run your batch jobs in your "primary business timezone". Sure, you might outgrow that concept eventually, but many companies never do, and in that sense "running on UTC" seems similarly aspirational in spirit (albeit at a much smaller scale) to starting with high scalability.

gruez•59m ago
>Even if you store everything in PST or EST or CST, you never know when you'll get customers from another part of the world and then you'll have to do this anyway. So why not do this already?

1. allowing users to change their timezone and tying it to when their quota reset sounds like a great way to add more edge cases and complexity. For instance, does messing with your time zone mean you can get your quota reset multiple times a day?

2. Not everyone operates some sort of global b2c SaaS that's timezone agnostic. For many enterprise backoffice tasks "6am HQ time" is far more reasonable than "6am/7am, dunno depends on whether daylight saving time is on or not". In this case having a server set to the HQ's timezone makes far more sense than doing UTC and trying to work around daylight saving issues.

freedomben•2h ago
Having tried many times to use local time instead of UTC to make life simpler for myself, I really don't think it's ever a good idea.

Better to localize times for users on the client-side based on their local settings, IMHO

For quotas and usage limit resets it can be a little harder, but if it's a cron job anyway, my initial approach would be to just schedule it for a time that is close to midnight for the area your customers are in.

Kwpolska•2h ago
That does not require setting the server to local time. Run the cron job every hour. Before starting the script, check the time and compare it to the last saved execution time. If the day has changed, do stuff and save the new date, else exit. This also happens to be more resilient to server downtime around midnight.
lxgr•1h ago
> Before starting the script, check the time and compare it to the last saved execution time. If the day has changed, do stuff and save the new date, else exit.

That sounds a bit like reimplementing a scheduler inside the scheduled task (which is ok if you don't trust your scheduler, but I'd avoid it if at all possible).

bell-cot•1h ago
Except downtime can start during execution. So for many types of jobs...

- Check if run today, exiting on "yes"

- Run

- Update the last-run-on date

latchkey•1h ago
What is "today"?
bell-cot•43m ago
Hopefully just a datetime recent enough that the job does not currently need to be (re-)run.

But as soon as one job needs another to complete first, or two jobs shouldn't be run at the same time - things start getting messy.

lxgr•40m ago
> Hopefully just a datetime recent enough that the job does not currently need to be (re-)run.

I can think of several ways to mess that seemingly trivial calculation up just from the top of my head. (Consider changing timezones, increasing the interval the job is running to within half a day of scheduling period etc.)

skissane•4m ago
> "Our customers aren't in UTC" is often a compelling reason.

This doesn’t work as soon as you become a global business… because if you tell a customer in Asia that it resets at midnight in some US timezone, what are they going to think?

Many people will accept UTC because it is the international standard. Everyone will accept “let each customer pick the timezone that works best for them”. Saying “I’m going to use a US timezone because that is easiest for our US customers” risks sending a message to your (now or future) global customers that you view them as second-class citizens.

latchkey•2h ago
At Marin Software, they ran each customer on their own set of servers and set the servers to the customers defined TZ. It was an endless cronjob nightmare. Now they are also bankrupt.

Just found out some guy decided to try to restart the company. Good luck. https://x.com/Austen/status/1981904435539280324

ta1243•2h ago
If I want a report of what happened at a specific time I need that report at local time

I get a daily status report of various things from our 24 hour operational management team which runs at 8am UK time every day. That means last week it ran at 0700UTC and this week at 0800UTC

This is built around operational events, shift changes, etc.

I've got another system which is in operation in Sydney from 0630 to 1630 local time, this means that maintence windows which overlap with UK shift patterns depend on the week but mean the system is operating 2130-0730 UK time at some times, 2030-0630 UK at others, and 1930-0530 at others.

UTC is not "the answer". Sometimes you want things running at a UTC time, sometimes you want them running at local time.

I have a regular meeting at 10am London time on Tuesday and Thursday. That can't be stored in UTC as it varies depending on the time of the year. It has to have the timezone stored and actioned.

latchkey•2h ago
You can tell the job when to run in UTC time and change that time depending on what the current DST rules are.

But if the job is set to run in UK time and the system clock jumps around because of TZ changes, it will run twice or not at all.

Having a stable zero based time that doesn't move around by external forces that you can't control is "the answer."

ta1243•1h ago
So I have to manually update the job

How about I use some form of library to do it. I tell it I want to run at 0800 London time, and it runs at 0800 London time

If I tell it I want to run at 0130 London time (or 0330 Athens time) I still have a problem -- do I run it twice when the clocks go back, do I skip it when clocks go forward?

But that's a business logic problem, and defining it as UTC and having another job to update the time twice a year doesn't actually solve the question of "what do I do at this point".

latchkey•1h ago
You don't have any choice in the matter. If you control the time you want the jobs to run externally from the server, then you can have control over it. Otherwise, you're getting jobs that run 2x or not at all.
ipaddr•1h ago
Generate earlier and send to various timezones when needed.
baq•1h ago
I agree with most everything except:

> If I want a report of what happened at a specific time I need that report at local time

this is hard when a particular hour can happen twice in a day right?

jedberg•2h ago
> Just use UTC folks unless you have a really good idea why you shouldn't.

If my whole team is based in Pacific Time, I'm gonna use something close to PT so I don't have to do hard math when reading raw logs.

If we're all US based, I still want something in the USA. The math is easier.

kjehjrktlhl•1h ago
Technical debt. Please don’t.
jrockway•1h ago
Yeah. I log in json + unix timestamp nanoseconds, and just convert it to something human-readable on display (github.com/jrockway/json-logs). I am not sure why logs need to be "pretty" at time of logging when they can be made pretty at time of display. Doing it at time of display means you can just use local time, and then nobody is confused.
jedberg•1h ago
Who hurt you? Why are you following me around begging people to use UTC?
throwaway150•1h ago
> Who hurt you?

Nobody hurt them. Please don't do this kind of childish rebuttals. It looks really silly on HN. If you don't want to use UTC, that's one thing. You do you. But there are reasons for sane professionals (who weren't hurt by anybody) to expect their coworkers to use UTC when possible. Because using local timezone leads to some problems including the one in TFA.

hobs•38m ago
Well me, I have been burned by fixing this UTC bug at like 8 companies and overall more than four year of my life (between other things, each project took at least six months of people poking at things) because at an eventual scaling point it starts biting your ass everywhere in every service.

Just because it worked once doesn't mean it's good.

anonymars•20m ago
I find all the holier-than-thou UTC worship especially ironic given that this post is about recurring scheduled tasks, for which naïve UTC almost never provides the expected results

UTC is the right choice for representing specific moments in time (so yes, log timestamps) but there are so many pitfalls outside of that narrow use case

onraglanroad•1h ago
Hard math. Ah right, I think it's not till the third year of a mathematics degree that you deal with "subtracting 8"! :)
BenjiWiebe•1h ago
I'm able to subtract 8, but if I'm scanning logs it's one more thing to process.

If it's local time I know instantly when something happened, without having to do mental math.

Is there anything wrong with ISO8601 (including timezone offset) for storing times? They're in my local time, but they can be accurately converted to any other timezone.

onraglanroad•49m ago
No problem as long as it's all local, but it's a big annoyance to the other teams if I'm trying to coordinate with the West US team who're on PT, the East coast on ET, Europe on CET, India on IST, Australia on BBQ...

It's just easier for everyone if we agree on UTC and everyone knows their own offset.

jedberg•1h ago
Don't forget changing the day 1/3 of the time. But more importantly, if I'm scrambling to solve an incident, the last thing I want to do is deal with time conversions in my head.
onraglanroad•18m ago
You just do it once and think in UTC going forward. But as I said to the other person, if you're only dealing with one timezone it's fine, just when you have multiple it's a lot easier to just deal with one time and let everyone convert.

I'd expect everyone who works in computer related jobs to know their UTC offset.

adammarples•1h ago
Why not just store everything utc but add a local time to the logging along with it?
jedberg•1h ago
Nowadays you could probably pull that off, most tools support quickly changing the time on the fly.
yabones•1h ago
I put a little analog clock on my desk that's set to UTC time. It helps a lot with converting logs to get a quick reference.
derwiki•1h ago
I do the same! I am in PDT and keep a UTC and EDT clock (most of my team is east coast)
schraitle•1h ago
I have a piece of paper on my desk, each side has the time zone, utc offset, and date when DST will change. Twice a year I flip over the paper.

Right now it reads "EDT, UTC-4, until: Sun, Nov 2"

Going to add a clock next to it now, that's a great idea

ZeWaka•1h ago
Analog clock is a great idea. I just use the Windows multiple timezone clocks feature, but I can see the usefulness of being able to glance at UTC.
gtowey•1h ago
I really love this idea!
nodesocket•1h ago
I use UTC for all public/production servers, but for my homelab servers in my closet rack they all use local time. Makes grokking times in homelab servers much easier. The exception is database insert/update date/times which are always stored UTC.
SecondHandTofu•1h ago
Generally, yes but I there's a surprising amount of cases when it is important, which makes it difficult to generalise e.g. Huge amounts of the financial sector cares because of market times or regulatory reasons.
jacobsenscott•1h ago
Also don't use cron full stop. Build (or use an off the shelf) scheduler in your app that's more sophisticated, has access to data and client preferences, etc.
superkuh•2h ago
This isn't a problem with actual cron and crontab. It is a problem with the systemd-timers shim "crontab" which doesn't work the same in many corner cases and often has weird bugs.
lxgr•2h ago
"Not a problem" as in these only run these cron job once per day, irrespective of DST changes making a given "hour happen twice"?
Bratmon•2h ago
How does actual cron handle this situation?
LegionMammal978•2h ago
This post is literally about an issue observed in vixie-cron (as included in some distro c. 2013), not about any systemd implementation.
ziml77•2h ago
What do you consider "actual cron"? Because the post specifically says Vixie cron, which has been the basis for most versions of cron on Linux systems.
Kwpolska•2h ago
Which cron is actual cron? There are tons of implementations out there.

This post describes vixie-cron, not systemd-timers.

cuu508•2h ago
Apparently there are some timezones (Cuba, Egypt, Lebanon) where DST change happens at midnight, so, also watch out for that!

https://mas.to/@mpirnat/115395859892135002

latchkey•2h ago
There are TZ rules that do all sorts of wild things.
noir_lord•2h ago
Leading to my favourite web comic of all time.

https://www.monkeyuser.com/2018/going-global/

Monkey User is always entertaining.

wat10000•2h ago
Brazil not only had DST at midnight, but until 2008 they also had no standard rule for when DST would begin and end, setting the dates by decree often just a few weeks in advance.
baq•1h ago
Is there any other person other than Arthur David Olson who needed an RFC written to cover their retirement?

https://www.rfc-editor.org/rfc/rfc6557.html

rmccue•1h ago
Jon Postel, the original RFC Editor and IANA: https://www.rfc-editor.org/rfc/rfc2468
spogbiper•1h ago
https://www.timeanddate.com/time/time-zones-interesting.html

I wonder how on earth do you deal with a 30 or 45 minute offset in real life

cesarb•43m ago
Wait, are there timezones where the DST change doesn't happen at midnight? That's news to me.

Now this article makes sense to me; I was wondering what made 02:00 and 03:00 special, since the DST changes would be from 00:00 to 01:00 and from 00:00 to 23:00, as I'm used to since childhood here in Brazil. Perhaps some other countries change DST from 02:00 to 03:00 and vice versa?

aflag•35m ago
In the UK we move forward at 1am and they go backward at 2am. Doing it at midnight adds the extra complexity that now the day is different. Doing it in the early morning doesn't change the day.

My guess is that in the US they do the same but shifted by one.

dist-epoch•27m ago
All of Europe changes from 02:00 to 03:00
gadders•2h ago
Also, never set jobs to run at midnight (00:00) as nobody will be able to tell what day it is. Set it to 00:01 or something.

And tbh, don't run jobs on the hour anyway. Everything kicks off then. Set stuff to run at 01:45 or 02:15 or something instead.

(None of these suggestions are time change related)

tetha•1h ago
In general I try to use odd times for cronjobs. Backups starting at XX:13, analysis scripts at XX:23, data exports at XX:42 and so on. This simplifies the question of "Why does my system go whack at 23:23? Oh, wait".
ttz•2h ago
> Alternatively, where possible set the server timezone to UTC so that no daylight savings changes will happen at all

this is the way

ldoughty•2h ago
I try to avoid crons at the top of the hour, partly because of this... but also because (in shared / serverless infrastructure) I assume a lot more people are setting their crons for 'on the hour' so there's more resource contention... I also aim for 'after 4am' where I can as well, or 'before midnight', to avoid this whole range.
sgc•1h ago
To incrementally improve that tactic, systemd has RandomizedDelaySec, which is a convenient way to reduce the possibility of scheduling conflicts.
tetha•41m ago
I prefer to combine this with FixedRandomDelay=true. FixedRandomDelay ensures that the randomized delay is an arbitrary number up to RandomizedDelaySec, but it is deterministic per server and timer. I find this useful because this means the timer will always run at XX:12:45 on server01, always run on XX:06:23 on server02 and so on.

This combines very simple configuration, while being predictable and spreading out timers well.

layer8•1h ago
One trick for cron is to prepend the actual command in the crontab with something like

    sleep $(( $(od -N1 -tuC -An /dev/urandom) % 60 ))m ;
which will delay it by 0 to 59 minutes at random.
throwaway106382•2h ago
bruh, just use UTC
bobmcnamara•1h ago
Ugh gross. Same non monotonic time problems just not every year.

TAI4LYFE!

jedberg•2h ago
I've told this story before, but it's super relevant here. When I set up all the servers for reddit, I set them all to Arizona time. Arizona does not have DST, and is only one hour off of California (where we all were) for five months, and the same as here the rest of the year.

I didn't use UTC because subtracting eight when reading raw logs is a lot harder than subtracting one.

They use UTC now, which makes sense since they have a global workforce and log reading interfaces that can automatically change timezones on display.

latchkey•1h ago
Computers can do things. Build a UX to read the logs and have it automatically parse/convert the logs to show whatever is local time.

https://unix.stackexchange.com/questions/274816/how-to-conve...

jedberg•1h ago
There are many solutions, but when you're actually running a site with millions of daily visitors and one person focused on ops, you do the easy thing, not the right thing, unless those happen to coincide.
latchkey•1h ago
Sure... "I'm too busy fighting fires to come up with a solution" is always a valid answer, but that's not what I was replying to.
lxgr•45m ago
Even with infinite resources (love to see that in real companies!), any such solution adds complexity, which comes at a cost.
latchkey•39m ago
If this is a complexity battle, I'd rather that sysadmins have to use a tool to read logs vs. figuring out why the server is melting down because all the jobs are running 2x or answering questions about why jobs didn't run at all.

In my old gig, jobs ran for many many HOURS and consumed most of the IO on the server (processing reams of data), which meant that when you got them running 2x because of overlap, it was a trainwreck.

lxgr•33m ago
In my experience, it's really not pleasant having to work with logs that require a dedicated viewer compared to regular old text files I can use Unix commands available everywhere (`tail`, `head`, `wc` etc), with, i.e. not just on the server producing the logs, but also the device I'm viewing them on.

That said, I absolutely prefer UTC times in logfiles. I'd rather do some math every time than make wrong assumptions about the local timezone of the file even once. (Even correctly indicated local times are more annoying, since I have the math for the offset of my timezone to UTC memorized, but not that of every possible server time to mine.)

latchkey•26m ago
alias tail="my fancy log viewer tail wrapper"

https://thecasualcoder.github.io/tztail/

lxgr•10m ago
That's exactly the type of thing I like to avoid having to do on some remote server, inside a container's minimal shell etc.
munchlax•12m ago
Yup. There's always some kind of tool anyway so why not. I mean, even if you read the logs as they come out of a screaming line printer, the tool is the thing that takes log messages and spits them out the printer port.

How hard can it be to write a log cat utility in awk?

taftster•1h ago
I mean, if this doesn't depict modern devops, I don't know what does. Unsung heroes, honestly.
ocdtrekkie•1h ago
The problem is a lot of times when you are looking at logs you are already very far off the happy path of things you look at often and want to invest resources into displaying well.
lxgr•47m ago
> Computers can do things. Build a UX [...]

That sounds like a job for a human (at least the review part), not only a computer.

mananaysiempre•15m ago
In my experience, the hard part is getting everybody else to do that. And then also getting them to actually include the timezone in their communication with you.
kjehjrktlhl•1h ago
This is not smart, this is just surprising to the next person who is going to maintain your ”smart” tricks. Thank god they switched to utc, that is what everyone expect.
adzm•1h ago
Sounds like it was smart at the time, and then eventually outgrew the solution.
jedberg•1h ago
Actually, back then, 18 years ago, most people expected your servers to be in Pacific or Eastern time, depends on where your company was headquartered, because none of us really had global technical workforces back then. We all pretty much worked in one office and used the local time zone, because often our servers were in the building with us or in a datacenter nearby.

Case in point, before reddit I was at eBay, and we kept all those servers in Pacific time, since the entire technical workforce was in Pacific time, as well as all of the servers.

Making blanket statements like that without considering the context of the time is usually not a good idea. ;)

aerostable_slug•1h ago
> most people expected your servers to be in Pacific or Eastern time

I was there back then, working for shops people have heard of, and I honestly don't know where you're getting this idea from. Some places did things wild and wacky when they were wee small, but most of us quickly learned that such shenanigans (like fun server naming conventions) start to fall apart and maybe we should do things differently.

latchkey•1h ago
It only matters if the servers were running cron jobs where it mattered if they ran "not at all or 2x."

Logs with weird dates on high demand production servers... less important.

tedivm•1h ago
Using UTC for servers was standard when I entered the field in 2005.
latchkey•1h ago
I was setting them to UTC in 1995.
wpollock•1h ago
In the 1980s, PT and ET were common. I was working at Bell Labs then, and one of my jobs was to change the time zone (back then it was two words) on the testing machines, as needed. This is stuck in my memory since to change the timezone, you needed to edit the Unix kernel source code and recompile it!
fainpul•1h ago
Ah you think UTC is your ally? You merely adopted UTC. I was born in it, molded by it. I didn't see DST until I was already a man, by then it was nothing to me but blinding!
whstl•8m ago
2000 for me. That was the first time I had users from outside my own time zone, so I figured it was better to just use UTC for everything and just convert depending on the user's settings. I think I just applied the thinking to the whole server.
frenzcan•1h ago
I run into this a lot when working with legacy code. The first reaction most teams have is to mock it, not understand it.
derwiki•1h ago
Yelp servers were set to Pacific time when I started in 2009, probably a decision from 2004
JohnBooty•28m ago
Everybody's dunking on you here but yeah, circa 18 years ago I remember that setting servers to local time was still pretty common.
js2•17m ago
> Actually, back then, 18 years ago, most people expected your servers to be in Pacific or Eastern time.

I've been in the industry since 1998 and I disagree with this assertion. At least, all the "most people" I knew were using UTC.

embedding-shape•1h ago
If you're like 5 people, each with a list of TODOs that doesn't fit on one screen, it's pretty smart to just do something quick and good enough, then move on, revisit it in the future.
dang•1h ago
Can you please make your substantive points without swipes? This is in the site guidelines: https://news.ycombinator.com/newsguidelines.html.
amaccuish•1h ago
I believe it was an anecdote and not a recommendation.
stronglikedan•1h ago
It was probably the smartest option at the time, given the context. As long as it was documented properly, no one on such a small team would have been surprised. Spend more than the 30 minutes you've spent here on HN so far, and you may learn a thing or two about what is "smart", and how that is inextricably linked to the given situation.
adzm•1h ago
> I didn't use UTC because subtracting eight when reading raw logs is a lot harder than subtracting one.

Also important here is that the date stays the same! Even though I've gotten used to instinctively decoding UTC, that part is still frustrating sometimes.

iamtedd•26m ago
What about that one hour in the day when the date isn't the same?
aerostable_slug•1h ago
I've had to try to clean up after a similar early decision and it was very painful.

Please stick with utc across the board people, someone someday may have to clean up your mess.

jedberg•1h ago
Nowadays I'd agree with you, UTC is probably the best bet. But back then, it wasn't.
rgbrenner•56m ago
using utc on servers was very common in 2005
tuhgdetzhh•48m ago
This can also be expressed as general advice.

Whenever you are unsure whether to use a clever solution or follow the globally accepted standard in your work as a DevOps or Software engineer, always choose the standard.

hinkley•43m ago
I can’t quantify how much time my team wasted in diagnosing production glitches on checking the wrong time offsets but it was substantial. One of our systems wasn’t using UTC, and given enough time the fact that Slack wasn’t using it either does become an issue. When an outage transitions to All Hands on Deck everyone needs to get caught up to what’s going on preferably under their own power so you don’t suffer the Adding Resources to a Late Project problem.

So that first alert that came in ?? minutes ago you need to align with the telemetry and logs in order to see what the servers were doing right before everything went to shit.

lxgr•42m ago
While I agree on this particular instance, there are two types of things future engineers have to clean up after: Their predecessors thinking too small (and picking the easy route) or too big (and adding needless complexity).

One is not necessarily and in all instances less of a mess to clean up behind than the other.

devsda•1h ago
Java allows setting the default timezone at jvm level and everyone in our org were setting their favourite TZ which was mostly PST somewhere in the code.

We had application logs and system level logs with different timestamp and someone decided a certain db column has to be a string of the format 'yyyy-mm-dd hh:mm:ss". You can imagine the confusion and the "fun" time we had while debugging logs from multiple systems at specific times.

Finally, one lead put their feet down and mandated that setting timezone to PST should be the first thing all applications do and db columns should be considered PST unless otherwise required.

mulmen•1h ago
Does that mean you ran PST during daylight savings time and half the year your logs were “off” by an hour? Or did you actually run Pacific Time and deal with the clock changes twice a year?
dpoloncsak•24m ago
Doesn't the JVM handle this when you set the tz? Otherwise...how is it different than just setting a clock?
skissane•11m ago
> Finally, one lead put their feet down and mandated that setting timezone to PST should be the first thing all applications do and db columns should be considered PST unless otherwise required.

That seems to me like a really bad mandate. If you are going to mandate something, mandate UTC. If someone forced me to change a system from UTC to something else, I’d not be very happy. It’s the kind of decision which makes you seriously question if you want to work there any more.

lxgr•49m ago
Closely related pet peeve: Log display web UIs that allow selecting display timezones including UTC absolutely insist on deriving my preferred time format (12/24 hours) from my browser language preference.

If nothing else, selecting UTC should be a very strong hint to any UI that I am capable of parsing YYYY-MM-DD and 24 hour times.

xmilka•27m ago
Just a strong hint your fellow techdorks were being at work. Oh so clever, aren't they, always?
webstrand•23m ago
That is the correct and only sane way to determine date format, timezone is not the same as formatting preference. But yeah it sucks. Assuming you're using the en-US locale, have you tried using the en-CA locale? It has ISO8601 formatted dates, and is otherwise pretty similar to the en-US locale.

In firefox you can try it out in about:preferences by setting en-CA as the topmost option in "Choose your preferred language for displaying pages"

lxgr•5m ago
> That is the correct and only sane way to determine date format, timezone is not the same as formatting preference.

That's unfortunate, but then wouldn't the sane way for localization-aware software be to ask the user and not make any such assumptions?

> Assuming you're using the en-US locale, have you tried using the en-CA locale? It has ISO8601 formatted dates, and is otherwise pretty similar to the en-US locale.

Thanks, I'll give that a try tomorrow! If my log exploring UI of, well, not quite choice actually respects that, I'll be very grateful :)

skissane•18m ago
If you use <input type=time>, the browser uses locale or user regional preferences… even if the app is in an application domain (e.g. medicine, military, science) where 24h is preferred even in 12h-predominant locales. There is no way for the app to say to the browser “this time field should be 24h in all locales”, the only option is to build a custom time field

I asked the HTML spec editors to fix this, but thus far they haven’t: https://github.com/whatwg/html/issues/6698

lxgr•9m ago
My issue is more with outputs than inputs (although the latter are also annoying to me in 12-hour format).
raggles•2h ago
I have a job that deliberately runs at 2am and 3am... to update the time in a bunch of really old PLCs for DST. And check that every other device on my telemetry network has correctly updated its time.
PhilipRoman•1h ago
I read this a while ago and was looking forward to the mess that would happen with these default Alpine configurations (after setting non-UTC localtime)

    0 2 * * * run-parts /etc/periodic/daily
    0 3 * * 6 run-parts /etc/periodic/weekly
It appears that busybox cron is smart enough to handle it and only ran the jobs once.
latchkey•1h ago
Google's AI and ChatGPT answer disagrees.

https://www.google.com/search?q=busybox+cron+dst

"BusyBox’s crond is a lightweight implementation designed for embedded systems, so it doesn’t have all the timezone/DST logic of full vixie-cron or cronie. It just reads /etc/TZ or the system timezone at startup and then wakes up every minute to check if something should run."

matja•1h ago
Seems to me the real problem here is not the timezone (there's legitimate business needs to run something daily at a specific localtime...) but having multiple instances of a cron job that overlap, in which case it should wait until the previous is done or not start at all. At least prefix a job with "flock -n" if it doesn't/can't handle that.
tonyhart7•1h ago
DST is such a dumb mechanism anyway

just use UTC

skopje•48m ago
UTC also solves plotting daily time plots in zones with time changes (twice a year when the plots make no sense). But there still isn't no good fix for leap year plots!
meonkeys•47m ago
anacron is worth a mention here for sometimes-on computers like desktops, laptops, or personal servers. It's great for ensuring something runs at the set interval, or just whenever the machine comes back online. Minimum anacron interval is one day, so this can't simply replace cron. cron might even be the most sensible thing to use to kick off anacron on your system, and it might already be in use (see if your /etc/crontab fires off anacron).

anacron won't have the OP's 2am/3am issue because it locks jobs while they run, so multiple job spawns should be no-ops. Still seems like it would be good practice to, e.g. use UTC for the host system and do whatever else might help avoid the unnecessary re-spawns.

litoE•47m ago
I run a cronjob at 2:30AM every day that uses dirvish (a perl wrapper around rsync) to perform backups of several computers. In the fall, at 2AM the clock is rolled back to 1AM. The cronjob runs at 2:30AM, which is 25 hours after the previous day's run. That's not a problem. However, in the spring, at 2AM the clock jumps to 3AM. Vixie cron seems to be smart enough to run all the cron jobs that were scheduled between 2M and 3AM at that point. However, dirvish is started but exits without running the backups! After some troubleshooting I concluded that dirvish does not make the backups because the previous day's run happened less that 24 hours ago (because that day was shortened by the change to DST) so it sees no need to run a backup yet. This problem would persist even if I moved the cronjob to a different time because it has to do with the day having only 23 hours. I solved this by adding a second entry to the crontab that runs at 3:45AM only on the 2nd Sunday in March.
tomkaos•41m ago
I avoid cron job at this time for this reason and for many other random problem because 3:00 am seem to be often choose for a maintenance like automatic update, server reboot, database backup..
tclancy•39m ago
Can be tricky: an old project had a job that ran every 15 minutes to poll data from a popular smart thermostat company. I always knew when DST was starting or ending because that job would throw an error email at 2/3am on those days.
hinkley•25m ago
2 am is mid afternoon for the Pune office. If you’re running a 24/7 operation and all of your employees are in PST you’re gonna have a bad time.

But the other thing that has changed since 2013 is that most of us are using autoscaling. There were times of day when there is supplemental server capacity to run periodic processes, and it made sense to schedule them during quiet daylight hours if they existed, but now the availability of bus numbers if and when a problem happens are more pressing. And they all outweigh concerns about DST. Instead of seeking the low traffic times of day you mainly need to avoid peak traffic.

The batch processing system I renovated to use 7% if the CPU hours of the original design, used the same fixed parallelism trick that crawlers use so as not to knock over your sites. They keep k requests in flight at all times and if your server responds faster, they issue more requests per second. If the production services had excess capacity the job would run in ten minutes. If response times are slow it takes 15. You’re inverting Little’s Law and keeping the amount of servers fixed and varying the duration.

It’s a pity that spooling up more servers to handle that job took a substantial fraction of that ten minutes or I could have gotten it to five (originally it was over 30 minutes and climbing toward 35). I tried at one point to move it entirely to a Bamboo agent but we underprovisioned them. If I’d had an agent with 2x the CPUs I could have shut down a service. I was on my way out the door before I realized that upgrading the bamboo agents would have cost us less than running that service and everyone’s builds would have been faster as a consequence. And probably let someone else do the same. False economies.