Linux cronjob不执行独立运行良好的脚本
我的php脚本文件位于Linux cronjob不执行独立运行良好的脚本,linux,bash,ubuntu,sh,crontab,Linux,Bash,Ubuntu,Sh,Crontab,我的php脚本文件位于/var/www/html/dbsync/index.php中。当cd/var/www/html/dbsync/并运行php index.php时,它可以完美地工作 我想通过sh文件调用PHP文件,sh文件的位置如下 /var/www/html/dbsync/dbsync.sh 这是dbsync.sh文件的内容: /usr/bin/php /var/www/html/dbsync/index.php >> /var/www/html/dbsync/myscri
/var/www/html/dbsync/index.php
中。当cd/var/www/html/dbsync/
并运行php index.php
时,它可以完美地工作
我想通过sh文件调用PHP文件,sh文件的位置如下
/var/www/html/dbsync/dbsync.sh
这是dbsync.sh
文件的内容:
/usr/bin/php /var/www/html/dbsync/index.php >> /var/www/html/dbsync/myscript.log 2>&1 -q -f
当我运行cd/var/www/html/dbsync/
并运行/dbsync.sh
时,它也能正常工作
现在,如果我按如下方式设置crontab:
1 * * * * /var/www/html/dbsync/dbsync.sh /var/www/html/dbsync
但是,此crontab没有按预期工作
有什么问题吗?从注释中可以看出,问题在于您没有定义应该使用什么程序来执行脚本。考虑到cronjob是在一个很小的环境中执行的;在那里,没有什么可以假设的。这就是我们定义完整路径等的原因 所以你需要说一些类似的话:
1 * * * * /bin/sh /var/www/html/dbsync/dbsync.sh /var/www/html/dbsync
# ^^^^^^^
/bin/sh
是要用于执行脚本的二进制文件
否则,您可以设置脚本的执行权限,并添加一个命令,告诉脚本使用什么解释器:
#!/bin/sh
如果执行此操作,则无需添加二进制文件的路径
发件人:
使用相对路径。如果您的cron作业正在执行某个
种类,则必须确保在该脚本中仅使用绝对路径。
例如,如果脚本位于/path/to/script.phpand
您试图在同一目录中打开名为file.php的文件,
不能使用相对路径,如fopen(file.php)。该文件必须
可以从其绝对路径调用,如下所示:fopen(/path/to/file.php)。
这是因为cron作业不一定从中的目录运行
脚本所在的位置,因此必须专门调用所有路径
另外,我知道你想每分钟都运行这个。如果是这样,
1****
就不行了。Intead,它将运行。因此,如果你想每分钟都运行它,比如说***
理解“登录shell”和“交互式shell”的含义是很重要的
- 登录shell:当您使用ssh会话登录并获得一个终端窗口时,您可以在其中输入shell命令。登录后,系统将执行一些文件(.bashrc)并为您设置一些环境变量,例如PATH变量
- 交互式shell:登录系统后,您可以手动启动shell终端。系统执行分配给您的帐户的一些配置文件(.bash\u profile、.bash\u login、.profile)。该文件还为手动打开的shell会话设置一些环境变量和初始化路径变量
- 使用“/usr/bin/awk”代替“awk”
- 使用“/bin/sed”代替“sed”
解决方案2:在执行shell脚本之前初始化环境变量,尤其是路径变量 第二个/var/www/html/dbsync用于什么?/var/www/html/dbsync-dbsync是保存index.php和dbsync.sh文件的目录。现在,我想每一秒都尝试一下。稍后,如果执行所需的结果,我将设置为每天午夜。您可以将所有这些命令放在另一个文件中,使其可执行为
chmod+x filename
,然后将该文件添加到crontab中吗?让我知道结果。您应该指定执行sh脚本的二进制文件-->1****/bin/sh/var/www/html/dbsync/dbsync.sh/var/www/html/dbsync
或通过说出which sh
得到的任何内容。谢谢@fedorqui这工作非常好,我会记住应该使用哪个程序来执行脚本。@sanainfotech欢迎:)您提供了很多详细信息,因此我试图使答案足够通用,以便在其他情况下用作参考。因为可以在crontab本身中设置路径(即使在最初的条目中也没有,但在文件的顶部——任何key=value
对都会自动导出到环境中),这个答案似乎没有明确讨论完成它命令的这种简单方法。