/home/myUser/scripts/test.sh
#!/bin/bash touch file.txt
crontab中:
* * * * * /home/myUser/scripts/test.sh
该脚本从终端运行正常,但无法将其作为cronjob运行.到目前为止,我已经在crontab中尝试了这些:
SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin * * * * * /bin/bash /home/myUser/scripts/test.sh
而这在脚本文件中:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/myUser/scripts
从我收集的解决方案可能在PATH变量中,但我无法弄清楚它是什么,因为我的理解在这一点非常有限.所以我的问题是,如何让我的脚本作为cronjobs运行?
编辑:cronjobs如* * * * * touch /home/myUser/scripts/test.txt工作,但它不会运行脚本.
编辑:当你引用一个文件没有指定其完整路径(例如file.txt,而不是完整路径/home/myUser/scripts/file.txt)在shell中,它被认为是指的是一个文件您当前的工作目录.当您运行脚本(无论是交互式还是通过crontab)时,脚本的工作目录与脚本本身的位置无关;相反,它是继承自脚本的任何操作.
因此,如果cd(更改工作目录)到脚本的目录,然后运行它,file.txt将引用与脚本相同的目录中的文件.但是,如果您先没有cd,那么file.txt会引用您运行脚本时遇到的任何目录中的文件.例如,如果您的主目录是/ home / myUser,并且您打开一个新的shell并立即运行脚本(如scripts / test.sh或/home/myUser/scripts/test.sh; ./test.sh赢得’它将触摸文件/home/myUser/file.txt,因为/ home / myUser是您当前的工作目录(因此是脚本的).
当您从cron运行脚本时,它基本上是一样的:它运行它与设置到您的主目录的工作目录.因此,脚本中的所有文件引用都取决于您的主目录,除非脚本在其他位置cds或指定文件的绝对路径.