cronjob does not execute a script that works fine standalone
As seen in comments, the problem is that you are not defining what program should be used to execute the script. Take into account that a cronjob is executed in a tiny environment; there, not much can be assumed. This is why we define full paths, etc.
So you need to say something like:
1 * * * * /bin/sh /var/www/html/dbsync/dbsync.sh /var/www/html/dbsync
# ^^^^^^^
/bin/sh
being the binary you want to use to execute the script.
Otherwise, you can set execution permissions to the script and add a shell-script header telling it what interpreter to use:
#!/bin/sh
If you do this, adding the path of the binary is not necessary.
From Troubleshooting common issues with cron jobs:
Using relative paths. If your cron job is executing a script of some
kind, you must be sure to use only absolute paths inside that script.
For example, if your script is located at /path/to/script.phpand
you're trying to open a file called file.php in the same directory,
you cannot use a relative path such as fopen(file.php). The file must
be called from its absolute path, like this: fopen(/path/to/file.php).
This is because cron jobs do not necessarily run from the directory in
which the script is located, so all paths must be called specifically.
Also, I understand you want to run this every minute. If so, 1 * * * *
won't do. Intead, it will run at every 1st minute past every hour. So if you want to run it every minute, say * * * * *
.
Why does my bash script work in a terminal, but not when using crontab?
The user name precedes the command to run in the system crontab. Use
0 * * * * root /bin/bash /home/henry/yupdate.sh > /dev/null 2>&1
instead.
Cron script doesn't work unless called by sh command
The problem is your printf
statement ... I'm fairly certain that you should also see error messages from rm
in root's mail to the effect that e.g.:1634986839.0000000000 Sun 24 Oct 2021 12:00:39 AM UTC /var/log/syslog.2.gz
doesn't exist.
CronJob not running
Finally I found the solution. Following is the solution:-
Never use relative path in python scripts to be executed via crontab.
I did something like this instead:-import os
import sys
import time, datetime
CLASS_PATH = '/srv/www/live/mainapp/classes'
SETTINGS_PATH = '/srv/www/live/foodtrade'
sys.path.insert(0, CLASS_PATH)
sys.path.insert(1,SETTINGS_PATH)
import other_py_filesNever supress the crontab code instead use mailserver and check the mail for the user. That gives clearer insights of what is going.
Related Topics
Bash Script with User Defined Functions in Autocomplete
Gatttool: Limited to 5 Connections
Avoid Copying of Data Between User and Kernel Space and Vice-Versa
Question About Epoll and Splice
How to Connect to Docker Container from Localhost
Placement of '-L' Option in Gcc
Hugo Version Not Updating to Latest
Bash: Ctrl+C During Input Breaks Current Terminal
How to Use Multiple Lower Layers in Overlayfs
Producer Consumer Implementation in a Block Device Driver
How to Generate Files in a Docker Container for Having The Same Owner as The Host's User
Using Source to Include Part of a File in a Bash Script
How to Make 'Docker Run' Inherit Ulimits