42
submitted 1 year ago by PrivateOnions@lemmy.ml to c/linux@lemmy.ml

I am on Mint XFCE and Redshift is just so inconsistent and I have tried its forks, also inconsistent. So instead I have been using sct in the terminal to adjust the temperature, and have set a command that resets it back to normal every time that I log on. However, I was wondering if there is a way to make it so that "sct 2750" runs every day at 10 pm or during a specific period of time.

top 50 comments
sorted by: hot top controversial new old
[-] _calm_bomb_@lemmy.ml 63 points 1 year ago

Use crontab. As Mint is based on Ubuntu, check out the documentation here: https://help.ubuntu.com/community/CronHowto

[-] BestBouclettes@jlai.lu 5 points 1 year ago

You can also use SystemD timers, which are (in my opinion) easier to manage

[-] luthis@lemmy.nz 4 points 1 year ago

Crontab is deprecated,theres a better way now. Dont ask me though because im working on servers that havent had an upgrade in 10+ years

[-] domi@lemmy.secnd.me 24 points 1 year ago

My servers are up to date and there is not a single Linux distro that has removed cron or marked it for removal yet. Probably will stay that way for a long time.

[-] pchem@feddit.de 15 points 1 year ago

Yes, it's usually still available, but systemd timers are the more "modern" way, which is why distros like Arch use them by default:

There are many cron implementations, but none of them are installed by default as the base system uses systemd/Timers instead

https://wiki.archlinux.org/title/Cron

[-] amyipdev@lib.lgbt 2 points 1 year ago

that's because we've understood there's a line between what is reasonable for most users to implement - cron - and what is more reasonable for the OS to implement - systemd timers.

you don't want a user who doesn't know what they're doing to accidentally brick a key OS timer (for instance, when they're setting up their own), so systemd helps to segregate while still allowing experienced users to easily stop timers.

meanwhile, for users, cron is much easier to work with...

[-] _calm_bomb_@lemmy.ml 19 points 1 year ago

You mean running systemd timers? Yes, they are great, but for a beginner I think understanding crontabs is still better.

Also, who said crontabs are deprecated? Do you have a source for that?

[-] luthis@lemmy.nz 2 points 1 year ago

Idk i remember reading that theres a new way. Maybe it isnt deprecated? Yes systemd timers is the new way

[-] amyipdev@lib.lgbt 2 points 1 year ago

systemd timers are not actually universal. not everyone uses systemd, some use sysvinit, openrc, etc. systemd timers are also much more difficult to set up.

cron is not "deprecated" and is still widely used industrially and locally.

[-] PrivateOnions@lemmy.ml 1 points 1 year ago

So I attempted to run a crontab and for whatever reason it does not do anything. What I put was * * * * * /usr/bin/sct 2750 after sudo crontab -e just to see if it even runs but it does not do anything. I rewrote and added multiple crontabs but no results. Any help would be appreciated.

[-] 133arc585@lemmy.ml 4 points 1 year ago* (last edited 1 year ago)

For the "schedule expression" (the * * * * * part), try https://crontab.guru/. Some distributions have shortcut expressions like @hourly or @daily so you don't have to type * */1 * * * etc.

The crontab generally has a header that shows the columns, but if not, they're: m h dom mon dow command.

From * * * * * /usr/bin/sct 2750 I'm guessing you want to run every minute. If that's the case, as another commented pointed out, try */1 * * * * /usr/bin/sct 2750, meaning every 1 minute.

[-] _calm_bomb_@lemmy.ml 2 points 1 year ago* (last edited 1 year ago)

OK... So, just to test, edit your crontab and run a basic command:

*/1 * * * * date >> ~/date.log

this will append the current date/time once a minute (*/1) to a file in your home dir. You can check if it works with cat ~/date.log

If that works, then try again with your command. I see you used the full path to it, that's a good thing. Also, what does that command do if you run it manually?

To run the command at 10 PM every day, you should have it like this:

0 22 * * * /usr/bin/sct 2750

[-] Dirk@lemmy.ml 34 points 1 year ago* (last edited 1 year ago)

People suggesting legacy methods like cron, but the only valid answer for modern Linux distributions is to use a systemd timer in userspace.

You just set up a service (what should be done and how do you want it to be done) and a timer (when should it be done).

https://gist.github.com/oprypin/0f0c3479ab53e00988b52919e5d7c144

[-] IsoKiero@sopuli.xyz 27 points 1 year ago

Which is a lot more difficult in every aspect than just throwing a single line on crontab and calling it a day.

[-] 0xtero@kbin.social 16 points 1 year ago

a lot more difficult in every aspect

Perfect summary of systemd

[-] Dirk@lemmy.ml 8 points 1 year ago

At the same time you get a lot more benefits doing so. You also don't need to install additional software just to run a background task every X time units.

And if you need to learn something, just learn the current state if the art.

[-] Maestro@kbin.social 5 points 1 year ago

I don't know any distro that ships without cron installed out of the box. Maybe some bare bones minimal distro but I assume that OP isn't using that or he would not need to ask this question.

[-] Synthead@lemmy.world 2 points 1 year ago* (last edited 1 year ago)

I don't agree with this statement, personally. People who aren't familiar with cron will see magic numbers and magic characters. It's also possible to have friction getting the environment set up correctly for the program being called by cron.

systemd timers use exact phrases in its configuration like "daily." You can also name the timer, start and stop the timer, view logs specifically for that timer, etc. Plus, it just calls a service file, which again is much simpler than other options like System V. You can run multiple commands in order, set an environment, use a user, jail the commands, etc.

Any of these things done "the old way" have been obscure and difficult. When was the last time you thought about a runlevel? The timer configs aren't one-liners, but it's because it's packed loads of features and it's human-readable. Plus, anything you do surrounding the cron job is also obscure, in my opinion.

Plus, cron jobs, if you choose to use them, are performed by systemd compatibility code, anyway.

[-] the_sisko@startrek.website 20 points 1 year ago

Cron may be old but I don't think it's "legacy" or invalid. There's plenty of perfectly good, modern implementations. The interface is well established, and it's quite simple to schedule something and check it. What's more, Cron works on new Linux systems, older non-systemd ones, and BSD and others. If all you need is a command run on a schedule, then Cron is a great tool for the job.

Systemd services and timers require you to read quite a bit more documentation to understand what you're doing. But of course you get more power and flexibility as a result.

[-] Dirk@lemmy.ml 7 points 1 year ago

Systemd services and timers require you to read quite a bit more documentation to understand what you’re doing. But of course you get more power and flexibility as a result.

Yes. There is simply no reason not to make it state-of-the-art from the beginning on. You get proper logging, proper error handling, better scheduling options and you most likely don't even need to set up additional software because systemd (and thus systemd timers) are default in pretty much all common Linux distributions (except some niche ones) since 10+ years.

[-] jsveiga@sh.itjust.works 9 points 1 year ago

"simply no reason"?

What about ease of use, simplicity, faster to quickly setup, backwards compatibility, and "crobtab is where everyone will look at when looking for a scheduled task"?

If systemd was implemented right, it would create the systemd files and autoconfigure default tasks by reading the crontab, for backwards compatibility.

[-] Ullebe1@lemmy.ml 1 points 1 year ago

What about ease of use, simplicity, faster to quickly setup, backwards compatibility,

The syntax of systemd timers is MUCH easier to read for newbies (and everyone else, really) as it uses words instead the placement of the characters on the line to convey meaning. If you can't remember or don't know the syntax well you can still understand a systemd timer, but that is much hard for the crontab. Granted, crontab uses fewer characters, but if you only set up either once in a blue moon you'll need the docs to write either for a long time. And is backwards compatibility really an issue with either one? All major desktop and server distros use systemd, and has for a while. Fedora doesn't even include a Cron by default anymore.

"crobtab is where everyone will look at when looking for a scheduled task"?

If it was a distro release from the last decade I'd definitely start by checking the systemd timers, rather than the crontab.

If systemd was implemented right, it would create the systemd files and autoconfigure default tasks by reading the crontab, for backwards compatibility.

You can to totally do this, using this systemd generator.

[-] the_sisko@startrek.website 2 points 1 year ago* (last edited 1 year ago)

If you can’t remember or don’t know the syntax well you can still understand a systemd timer, but that is much hard for the crontab.

I will agree that it is easier to read a timer than a Cron entry, especially if you've seen neither of them before.

Granted, crontab uses fewer characters, but if you only set up either once in a blue moon you’ll need the docs to write either for a long time.

This is where I disagree. I very rarely setup a Cron job, but when I do, I don't need to look anywhere for docs. I run crontab -e and the first line of the editor contains a comment which annotates each column of the Cron entry (minute, hour, dom, mon, dow). All that's left is to put in the matching expressions, and paste my command.

Compare that to creating a new timer, where I need to Google a template .service and .timer file, and then figure out what to put in what fields from the docs. That's probably available in the manual pages, but I don't know which one. It's just not worth it unless I need the extra power from systemd.

This is from somebody who has several systemd timers and also a few Cron jobs. I'm not a hater, just a person choosing the best and easiest choice for the job.

[-] jsveiga@sh.itjust.works 14 points 1 year ago

Honest question: Why is that the only valid question, if crontab works and is much, much simpler to use?

[-] addie@feddit.uk 13 points 1 year ago

You seem to have fallen foul of all the SystemD haters in the voting, when this is the best answer. OP's question was about doing one thing on a timer and a very similar thing on login; SystemD can achieve both of these in one place with proper logging and status displays, whereas Cron cannot.

Most of the things that you'd want to run on a timer have additional dependencies (I'd like to snapshot the database if the database is running; I'd like to backup up my files to a remote server if the network is up) which as easy to express in SystemD files as anything else it can do. Might as well learn to use the most versatile and powerful tool if you're going to learn anything. Admittedly, I don't like its syntax, but it achieves this kind of thing perfectly.

[-] rhys@mastodon.rhys.wtf 5 points 1 year ago

@addie @Dirk I think you're spot on. SystemD timers are mildly more inconvenient to create than cron jobs, but massively more convenient to maintain and work with for real.

[-] EddyBot@feddit.de 1 points 1 year ago

An additional thing is that cronie/cron has no idea about an user desktop session out of the box while systemd user scripts do

OP edited this solution which needed a special env variable DISPLAY
this might be common knowledge but it certainly is not for a beginner

[-] lootgoblin42@kbin.social 1 points 1 year ago

Why is cron not a good solution?

[-] Dirk@lemmy.ml 1 points 1 year ago

I didn't say it is not a good solution. It's a legacy solution replaced by systemd timers.

With systemd timers you're entirely more flexible and timers run much more reliable. You also get proper logging and you cleanly separate program execution and scheduling of program execution. And since timers aren't crammed all in one file line-by-line you can independently version them using Git or backup individual timer configurations.

If you don't care for that and don't really care if a job gets executed reliably and don't want to specify precisely when (on startup, on shutdown, specific time, repeatedly, etc.) a program is executed, just go with cron - you might need to install a cron daemon and set up the needed service in systemd first.

[-] Nuuskis9@feddit.nl 19 points 1 year ago

Write a bash script and add that script into cron job.

[-] PrivateOnions@lemmy.ml 9 points 1 year ago

Any tutorials or links on how to do so? I am still a noob so I apologize in advance.

[-] Nuuskis9@feddit.nl 19 points 1 year ago

There's no need to be sorry for being noob. I also recognized that from your original post.

Fast and short bash-scripting course with actually useful tasks:

https://www.youtube.com/playlist?list=PLT98CRl2KxKGj-VKtApD8-zCqSaN2mD4w

For cron write 'man cron' into your terminal and read the manpage docs on how to use cron. As already suggested 'crontab -e' is the command you need, but a quick look in the docs explains you how it actually works.

I don't give you direct answers simply because I want you to learn Linux by yourself and enjoy the benefits of it :)

[-] PipedLinkBot@feddit.rocks 8 points 1 year ago

Here is an alternative Piped link(s): https://piped.video/playlist?list=PLT98CRl2KxKGj-VKtApD8-zCqSaN2mD4w

Piped is a privacy-respecting open-source alternative frontend to YouTube.

I'm open-source, check me out at GitHub.

[-] IsoKiero@sopuli.xyz 6 points 1 year ago* (last edited 1 year ago)

Since you only need to run a single command as a user open terminal and give command 'crontab -e'. If you haven't set an editor it'll ask for one, pick nano.

The syntax for crontab is like this (man 5 crontab will show it on your system as well):

field          allowed values
-----          --------------
minute         0–59
hour           0–23
day of month   1–31
month          1–12 (or names, see below)
day of week    0–7 (0 or 7 is Sun, or use names)
command to run with full path

So, in your case put in this line:

0 10 * * * /usr/bin/sct 2750

I'm not sure if sct is really at that path and I don't have that installed, so verify that first (run 'which sct'). Save the file and exit editor (ctrl+o, ctrl+x on nano). That's it. However, I don't quarantee results with that, since X with environment variables and all may cause issues, but if that's the case I'm sure this community can help with that as well.

[-] gratux 15 points 1 year ago

you could use a cron job

[-] LiamMayfair@lemmy.sdf.org 3 points 1 year ago* (last edited 1 year ago)

You could use either systemd timers or anacron, which is a version of cron designed for laptops and machines that are not powered on 24/7 like servers.

[-] SexualPolytope@lemmy.sdf.org 3 points 1 year ago* (last edited 1 year ago)

While cron will do the job just fine, if you want to be a bit more fancy and tie it to sunrise/sunset times, you can do that using at and sunwait. I have a similar setup, but it changes my monitor's brightness.

load more comments
view more: next ›
this post was submitted on 13 Jul 2023
42 points (100.0% liked)

Linux

48332 readers
544 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS