微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 运行一个简单的shell脚本作为cronjob

我有一个非常简单的 shell脚本,我需要作为一个cronjob运行,但我甚至不能得到测试脚本运行.这里和示例脚本:

/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运行?

编辑:该文件具有所有用户的rwx权限.这只是为了测试目的.

编辑:cronjobs如* * * * * touch /home/myUser/scripts/test.txt工作,但它不会运行脚本.

什么目录是file.txt? cron在你的主目录中运行作业,所以除非你的脚本在别的地方cd,否则它会在那里寻找/创建file.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或指定文件绝对路径.

原文地址:https://www.jb51.cc/bash/385918.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐