我刚刚开始使用 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
再次为我的用户使用该变量。
因此这将创建我想要的但没有错误权限的文件。
感谢大家的帮助。