User Tools

Site Tools


troubleshooting:cronstoppedworkingonmacbook

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
troubleshooting:cronstoppedworkingonmacbook [2023/02/25 16:15] – created kamaradskitroubleshooting:cronstoppedworkingonmacbook [2023/03/07 22:51] (current) – [final thoughts] kamaradski
Line 1: Line 1:
 ====== why is cron no longer working on my macbook? ====== ====== why is cron no longer working on my macbook? ======
 +
 +===== troubleshooting process =====
  
 If the cron service on your MacBook has stopped working, here are some steps you can take to troubleshoot the issue: If the cron service on your MacBook has stopped working, here are some steps you can take to troubleshoot the issue:
  
   * Check the status of the cron service: Use the ''ps'' command to check if the cron service is running. Type ''ps aux | grep cron'' in the terminal to see if the cron service is currently running. If it's not running, you may need to start it manually.   * Check the status of the cron service: Use the ''ps'' command to check if the cron service is running. Type ''ps aux | grep cron'' in the terminal to see if the cron service is currently running. If it's not running, you may need to start it manually.
-  * Check the cron logs: The cron service logs its activities to a file. To view the cron logs, type ''tail -f /var/log/syslog'' in the terminal. This will show you the last few lines of the system log in real-time. Look for any messages related to cron, such as errors or warnings.+  * Check the cron logs: The cron service logs its activities to a file. To view the cron logs, type ''tail -f /var/log/system.log'' in the terminal. This will show you the last few lines of the system log in real-time. Look for any messages related to cron, such as errors or warnings.
   * Check the crontab file: The crontab file is a configuration file that tells the cron service what jobs to run and when. Type ''crontab -l'' in the terminal to view the contents of your crontab file. Make sure that the syntax of your cron job entries is correct, and that they are scheduled to run at the correct times.   * Check the crontab file: The crontab file is a configuration file that tells the cron service what jobs to run and when. Type ''crontab -l'' in the terminal to view the contents of your crontab file. Make sure that the syntax of your cron job entries is correct, and that they are scheduled to run at the correct times.
   * Check the permissions of the cron files: Make sure that the cron files have the correct permissions. Type ''ls -l /usr/sbin/cron'' in the terminal to view the permissions of the cron binary. It should have the permissions ''-rwxr-xr-x'' (read, write, execute for the owner; read and execute for group and others). Similarly, check the permissions of the crontab files by typing ''ls -l /usr/lib/cron/tabs''.   * Check the permissions of the cron files: Make sure that the cron files have the correct permissions. Type ''ls -l /usr/sbin/cron'' in the terminal to view the permissions of the cron binary. It should have the permissions ''-rwxr-xr-x'' (read, write, execute for the owner; read and execute for group and others). Similarly, check the permissions of the crontab files by typing ''ls -l /usr/lib/cron/tabs''.
   * Restart the cron service: If none of the above steps resolve the issue,\\ you may need to restart the cron service. Type ''sudo launchctl unload /System/Library/LaunchDaemons/com.vix.cron.plist'' to stop the cron service, and then type ''sudo launchctl load /System/Library/LaunchDaemons/com.vix.cron.plist'' to start it again.   * Restart the cron service: If none of the above steps resolve the issue,\\ you may need to restart the cron service. Type ''sudo launchctl unload /System/Library/LaunchDaemons/com.vix.cron.plist'' to stop the cron service, and then type ''sudo launchctl load /System/Library/LaunchDaemons/com.vix.cron.plist'' to start it again.
 +
 +
 +===== is the process running? =====
 +
 +yes, as expected once for root, and once for the local user:
 +<code bash>
 +$ ps aux | grep cron
 +root               457   0.0  0.0 408113488   1056   ??  Ss   Tue06PM   0:00.51 /usr/sbin/cron
 +kamaradski       37314   0.0  0.0 408628368   1632 s013  S+    5:17PM   0:00.00 grep cron
 +</code>
 +
 +===== do we have anything in the logs? =====
 +
 +no:
 +<code bash>
 +$ cat /var/log/system.log | grep "cron"
 +</code>
 +However, this is not a good thing as i would expect also a note when crons are getting executed successfully
 +
 +===== do we have valid crons? =====
 +
 +<code bash>
 +$ crontab -l
 +0 6 * * * cd /Users/kamaradski/00-automation/script1 && go run main.go
 +5 6 * * * cd /Users/kamaradski/00-automation/script2 && go run main.go
 +</code>
 +
 +Can we run the command from our current user? => yes:
 +
 +<code bash>
 +$ cd /Users/kamaradski/00-automation/script1 && go run main.go
 +12345689%                                                                                                                                                                               
 +</code>
 +
 +Hmm just to be sure let me point it to the exact go bin that we want to use, who knows?
 +
 +<code bash>
 +$ which go
 +/opt/homebrew/bin/go
 +
 +$ crontab -e
 +crontab: installing new crontab
 +
 +$ crontab -l
 +0 6 * * * cd /Users/kamaradski/00-automation/script1 && /opt/homebrew/bin/go run main.go
 +5 6 * * * cd /Users/kamaradski/00-automation/script2 && /opt/homebrew/bin/go run main.go
 +</code>
 +
 +And yay what do you know: this fixed my issue :)
 +
 +===== have a look at the file permissions =====
 +
 +> By default, the /usr/lib/cron/tabs/ directory should have a file mode of 755 and an owner of root. The files in the directory should have a file mode of 644 and an owner of root. This means that only the root user can modify the files, but any user on the system can view the contents of the files.
 +
 +<code bash>
 +$ ls -l /usr/sbin/cron
 +-rwxr-xr-x 1 root wheel 205440 Jan 11 08:03 /usr/sbin/cron
 +
 +sudo ls -l /usr/lib/cron/tabs
 +Password:
 +total 8
 +-rw-------@ 1 root  wheel  420 Feb 25 17:40 kamaradski
 +</code>
 +
 +This is fine, my particular issue was already fixed in the previous step, however, if your issue is still happening you can always try edit this file to 644 and test again.
 +
 +===== why is cron behaving differently? =====
 +
 +The cron daemon runs in the background of a system and executes scheduled tasks based on a predefined schedule. These tasks are executed in a separate environment, which is not the same as the environment of the actual user who is logged in.
 +
 +When a user logs into a system, they are assigned a shell, which defines their environment variables, such as PATH, HOME, and others. These environment variables are specific to the user's session and are not shared with other users or processes running on the system.
 +
 +In contrast, the environment in which cron jobs run is defined by the cron daemon itself. The cron daemon sets its own environment variables, which are different from those of the user who is logged in. This means that the cron jobs may not have access to the same resources or settings as the user who is logged in, such as environment variables or configuration files.
 +
 +Therefore, it's essential to consider the environment in which cron jobs run when scheduling tasks. It's also important to ensure that the necessary environment variables and resources are available to the cron jobs to ensure that they execute correctly. This can include setting the appropriate environment variables within the cron job itself or modifying the system's configuration to ensure that the necessary resources are available to the cron jobs.
 +
 +So obviously things like the below will not work:
 +  * Any EnvVar you have set under your user environment via for example ''.bash_profile'' or ''.bashrc''
 +  * Use of standard variables like ''$HOME''
 +  * $PATH is also empty, so this is why I needed to specify the full path for the Go application in the example above
 +
troubleshooting/cronstoppedworkingonmacbook.1677341750.txt.gz · Last modified: 2023/02/25 16:15 by kamaradski