cron 没有写入文件

cron 没有写入文件

我刚刚开始使用 cron 作业,我想从一个简单的任务开始。在我的主文件夹中创建一个包含 输出的文件ifconfig。所以我创建了test.sh,并使用以下命令使其可执行:

#!/bin/bash          
ifconfig > /home/myname/ipt

ipt里面。当我从终端运行它时,它会创建包含输出的文件ifconfig

要在我的脚本中添加脚本,crontab我输入:

sudo crontab -e

我添加了如下脚本:

* * * * * /home/myname/test.sh

并且第一分钟它会创建文件 ipt,该文件有一个锁定图标,只读且里面是空的。

有两个问题:

第一,为什么它是空的?

第二,为什么它是只读文件?

答案1

请尝试@heemayl所说的,在您的test.sh:中使用完整路径

/sbin/ifconfig >/home/myname/ipt

解释

在命令提示符下运行脚本时,您以具有某些功能的用户身份执行此操作,例如

  • 让 $PATH 变量包含/sbin/能够“知道”何时请求ifconfig指的是/sbin/ifconfig

然而,Cron 并不是和你完全相同的用户

  • 因此当 cron 尝试运行时,它不ifconfig知道
  • 当然,除非你明确指定位置:/sbin/ifconfig

不知道程序在哪里的效果,你可以自己测试一下,尝试运行命令提示符下不存在的程序:

$ doesnotexist > ipt2
bash: doesnotexist: command not found

请注意当你:

$ ls -lh ipt2
-rw-r--r-- 1 youruser youruser 0 Dec 17 14:48 ipt2

它是一个

  • 0字节文件
  • 只读

这与您最初使用 crontab 时发现的结果完全相同,它不知道ifconfig是什么,导致生成一个 0 字节、大部分为只读的文件。

因此在 cron 中,只需提供完整路径即可帮助它找到程序,只要您没有权限问题,它就应该可以工作。

答案2

答案 1:

该文件是空的,因为我没有给出命令的全名,感谢@heemayl 和@user454038

答案2:

该文件是只读的,因为我以 root 身份创建了一个 cronjob,并尝试以用户身份打开它

sudo crontab -e

但我只需要创建没有 sudo 的用户

crontab -e

因此,像用户一样工作的.sh文件将是

/sbin/ifconfig > ipt

和 crontab

* * * * * $HOME/test.sh

$HOME再次为我的用户使用该变量。

因此这将创建我想要的但没有错误权限的文件。

感谢大家的帮助。

相关内容