我有一个bash脚本,如果我手动运行(作为根)执行所有的任务没有问题。 这些任务只是一些PHP脚本,然后将“mv”移动到临时文件夹。
问题是,当我作为cron作业运行脚本时,出现以下错误:
mv: cannot stat `/var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv': No such file or directory
该文件肯定存在,所以我想这是一个权限问题,但因为它在根的crontab文件,我不明白为什么它不能看到该文件。 有任何想法吗?
提前致谢!
脚本本身:
[root@cartman jupiter]# cat /opt/triggers/jupiter/jupiter_manager_trigger.sh #!/bin/bash php /opt/triggers/jupiter/php/import.php > /var/log/triggers/jupiter_`date +%Y%m%d`_import.log php /opt/triggers/jupiter/php/update.php > /var/log/triggers/jupiter_`date +%Y%m%d`_update.log php /opt/triggers/jupiter/php/export.php > /var/log/triggers/jupiter_`date +%Y%m%d`_export.log php /opt/triggers/jupiter/php/upload.php > /var/log/triggers/jupiter_`date +%Y%m%d`_upload.log mv /var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv /var/sftp/jupiter_sftp/processed/`date +%Y%m%d`_Yesterday_email_addrs.csv
这个“mv”似乎是问题。 但是该文件肯定存在:
[root@cartman jupiter]# ls /var/sftp/jupiter_sftp/incoming/ Yesterday_email_addrs.csv
import.php文件也使用该文件,也不能“看到”文件。
这是root的crontab:
[root@cartman jupiter]# crontab -u root -l * * * * * cd /var/www/sugar; php -f cron.php > /dev/null 2>&1 0 10 * * * sh /opt/triggers/jupiter/jupiter_manager_trigger.sh 10 4 * * * sh /opt/scripts/s3backup_www.sh 0 4 * * * sh /opt/scripts/mysql_backup.sh
这是import.php文件的相关部分:
$load="LOAD DATA LOCAL INFILE '/var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv' INTO TABLE Managers FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 5 LINES (Hotel,@ignore,@ignore,Title,FirstName,LastName,Email,@ignore);";
所以看起来问题仍然存在。 Mysql和mv今天不能再“看”这个文件,虽然它在那里:
Sat, 09 Mar 2013 11:00:01 +0000 total 12 -rw-r--r-- 1 jupiter_sftp sftpusers 9590 Mar 9 00:55 Yesterday_email_addrs.csv -rw-r--r-- 1 jupiter_sftp sftpusers 9590 Mar 9 00:55 /var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv
以下是日志中的错误:
Data base error. MySQL writes: Can't get stat of '/var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv' (Errcode: 2) mv /var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv /var/sftp/jupiter_sftp/processed/20130310_Yesterday_email_addrs.csv
mv:can not stat`/var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv':没有这样的文件或目录
我几乎肯定这是一个权限问题。 cron“root”似乎无法“看到”这些文件,但是如果我以root身份移动它们,或者以su root身份运行脚本,则脚本将正确完成。
没有这样的文件或目录是一个明确的消息,该文件没有find。 权限问题会给出以下消息之一:
所以,请仔细检查你的情况,也许提供更多的信息,例如相关的源代码和crontab条目。
debugging你的情况的一个好主意是用下面的debugging代码来丰富jupiter_manager_trigger.sh 。
{ date -R set -xv ls -l /var/sftp/jupiter_sftp/incoming/ ls -l /var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv mv /var/sftp/jupiter_sftp/incoming/Yesterday_email_addrs.csv /var/sftp/jupiter_sftp/processed/`date +%Y%m%d`_Yesterday_email_addrs.csv set +xv } >>/tmp/debug_jupiter.out
通过这种方式,您可以确保在调用时文件已存在,处于何种状态。