user2687408
user2687408

Reputation: 5

Running php script with cron: Could not open logfile, so such file or directory

I have a Raspberry Pi set up as a seedbox. I have a cron job that will run every 10 minutes, check for finished files using transmission-remote -l, grep for entries that are done (100%), get the names of the folders, copy these to the external drive, and then delete the original files on my Pi.

For every action that is done (A torrent is added, a torrent is finished, a file transfer has started, a file transfer has finished and the files have been deleted) an entry is written to my logfile.log, which is located in the same directory as all scripts, ´/home/pi/dev/´. Inside that folder I have a subfolder, logs that keeps logfiles on all moves from the pi to the external drive. These logfiles are all named after the folder/file being moved.

As I said, every 10 minutes, torrentfinished.phpis run through the cron job

*/10 * * * * php -f /home/pi/dev/torrentfinished.php

All output from the job is sent to my mail at /var/mail/pi.

Now, if I run the script manually, I can run it from anywhere by writing

php -f /home/pi/dev/torrentfinished.php

I have some debug lines written in right beneath the execution of each command. (I use shell_exec to run the commands because I'm more comfortable writing in php than bash).

It'll output

Started transfer
Wrote transfer to logfile

In logfilean entry is then added, with the text $timestamp : started transfer of data from torrent $torrentname. A separate file is created in logs/$torrentname.log. Basically, everything works perfectly.

However, when the cron job runs, I get the following output in /var/mail/pi

Unable to open logfile: No such file or directory
Started transfer
Wrote transfer to logfile

But as you've probably guessed, nothing happens. The files remain in their spot on the Pi and are not transferred. In addition, nothing is written to logfile or logs/$torrentname.log.

I've been wracking my brain over this, and been using chmod 777 on more files than could possibly be considered necessary nor safe, simply to make sure this isn't a permissions issue. I may have missed something of course, but I wouldn't think so. I've also tried renaming the file logfile to something else, but I still get the same error.

I have no more ideas on what to do, so if any of you have ideas, please do tell!

Upvotes: 0

Views: 569

Answers (2)

Yuriy Kolbasinskiy
Yuriy Kolbasinskiy

Reputation: 3841

When you use this:

php -f /home/pi/dev/torrentfinished.php

You stay at /home/pi/dev/ directory. And logfile is written at /home/pi/dev/logs

When you run script in cron, base directory is another (for example it may be /bin or /usr/bin).

Try to use DIR or FILE constants to set a logfile path.

Upvotes: 1

Stuart
Stuart

Reputation: 575

It might help to see the actual php code. My first step here would be to have the code print the path to logfile so I could figure out why it thinks it doesn't exist (are you using a relative path or some environment variable, because cron tends to run in a sanitized environment).

Upvotes: 0

Related Questions