question for Linux/BSD fags:
why does a cron job write files to the wrong directory
my crontab looks like this:
*/5 * * * * /root/foo/script.sh
if i just run ./script.sh from the command line it writes a output.txt file into it's local ./foo directory
but if the script is run from a cronjob, it writes output.txt to /root
wtf?
>>55908989
why the fuck wouldn't it, if it references a file in the current directory? It sounds like there's two copies of the script.
>>55909026
no, just one copy, and it's in /root/foo/ directory. but when run as as cronjob - instead of writing output files to /root/foo it writes them to /root
>>55908989
either write the script to output specifically in the ~/.foo directory
or maybe you are running the script as root
or append a cd command to your directory and then run your script
e.g. cd /root/foo/ && ./script.sh
>>55909044
Well if it calls the script from /root, and the script creates the file ambiguously. e.g.touch output.txt, it would create a file in its current dir.
e.g. again:/root/~# ./foo/script.txt
/root/~# ls
output.txt
/root/~# cd foo
/root/foo/~# ./script/txt
/root/foo/~# ls
output.txt
make sense? I think I have this right, at least.
>>55909065
> append a cd command
this worked! thx
98% sure your cron daemon is running as root.
add some bash script that just echoes pwd to the cronjob and check the output
>>55908989
I'd just like to interject for a moment. What you’re referring to as Linux, is in fact, GNU/Linux, or as I’ve recently taken to calling it, GNU plus Linux. Linux is not an operating system unto itself, but rather another free component of a fully functioning GNU system made useful by the GNU corelibs, shell utilities and vital system components comprising a full OS as defined by POSIX.
Many computer users run a modified version of the GNU system every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is often called “Linux”, and many of its users are not aware that it is basically the GNU system, developed by the GNU Project. There really is a Linux, and these people are using it, but it is just a part of the system they use.
Linux is the kernel: the program in the system that allocates the machine’s resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. Linux is normally used in combination with the GNU operating system: the whole system is basically GNU with Linux added, or GNU/Linux. All the so-called “Linux” distributions are really distributions of GNU/Linux.