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 @[email protected]

  • @[email protected]
    link
    fedilink
    101 year 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
    51 year 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.

  • @[email protected]
    link
    fedilink
    English
    21 year 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.

  • Lupec
    link
    fedilink
    1
    edit-2
    1 year 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
  • SokathHisEyesOpen
    link
    fedilink
    English
    11 year 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
    11 year 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.

  • @[email protected]
    link
    fedilink
    11 year 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

    • Alvaro OP
      link
      fedilink
      11 year ago

      @[email protected] good old Ubuntu , but it runs sh instead of my own zsh, path is different etc.

      I’ve had to manually edit the env variables which is a pain because I forget to update the cronjob path as well

  • @thisisawayoflife
    link
    11 year 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.