It is always a struggle configuring a cronjob to run certain scripts; there is always a mis configuration, a PATH, an environment variable that is different from when you use it in interactive mode, etc… Do you have any tricks to avoid or minimize those issues?

cc @selfhost@lemmy.ml

  • @skilltheamps@feddit.de
    link
    fedilink
    1010 months ago

    Use a systemd-service + systemd-timer. You can then run “systemctl start myjob.service” to check that it runs as you expect. If it works “systemctl enable --now myjob.timer” to kick it off as scheduled

  • nitrolife
    link
    fedilink
    610 months ago

    You can use crontab -e from user. That set user environment to usual state. Or you can use systems timers instead crontab.

    Or you can set all environment variables inside cron file.

  • @johntash@eviltoast.org
    link
    fedilink
    English
    210 months ago

    Depending on what your setup is like, you could use something other than cron.

    Kubernetes and Nomad both have cron-like schedulers. It’s convenient to keep your cronjob definitions near the app code.

    I’ve also been using windmill.dev lately for some simple cronjob-like tasks and it’s working pretty great. It also has a UI if that helps.

  • SokathHisEyesOpen
    link
    fedilink
    English
    110 months ago

    Put all the logic in a php file and just configure crontab to run the file at the given interval and output the results to a log file. Use crontab.guru to help with scheduling.

  • Coelacanthus
    link
    fedilink
    110 months ago

    Always use absolute path. If you write some shell snippet which may be run in different environment, avoid use just command name for uncommon one.

  • @Kimusan
    link
    110 months ago

    If Cron is too hard for you (it is really easy so I don’t really understand your problems) then check out runat instead. Simple and easy to use with all the features I would suspect you use in cron

  • @thisisawayoflife@lemmy.world
    link
    fedilink
    110 months ago

    Wrap all the cron job tasks in a bash script and make sure it works. Call the script directly in the cron configuration. Dump the output of the cronjob to a logfile. Set it up to run every minute so you can ensure it works via the cron environment.

  • Lupec
    link
    fedilink
    1
    edit-2
    10 months ago

    I basically combine a few mechanisms to mitigate that:

    • Having cron call scripts deployed to a fixed location I can manually test or use on demand as needed
    • Piping each script’s output/exit code to healtchecks.io so I can get feedback notifications when/if they fail
    • Using Ansible to deploy everything so it’s all repeatable and version controlled