问题
- 我想通过 SFTP 自动下载文件
- 我设置了一个 SFTP 服务器和一个密钥机制
- 我创建了一个简单的 bash 脚本 -脚本
- 我在 cron 中添加了脚本条目
剧本,脚本:
#!/bin/bash
sftp user@server:/home/user/file.txt
exit 0
手动执行脚本可以正常工作(文本文件保存在主目录中),但添加脚本(具有适当的权限)crontab
不执行任何操作。
crontab 条目:
* * * * * /home/user/script.sh
为了进行身份验证,我曾经ssh-keygen
创建了一组密钥(私钥、公钥)并设置了与 SFTP 服务器的交叉身份验证。
对于脚本自动化,我使用keychain
无密码身份验证。
现在
目前,我有一个名为脚本位于“用户”主目录(/home/user/
)。
手动运行时root
,脚本从 SFTP 服务器获取文件,并将其放置在 中/home/user/
。
从作业运行时不会执行此操作cron
。在 中cron
,sftp
命令出错。
有想法吗?
正在努力
- 改变家变量
/etc/crontab
没有解决问题 - 说明完整路径脚本没有解决问题
- 声明小路变量脚本没有解决问题
- 我从命令中发现了错误
sftp
- 它是255
但是手动执行脚本(./script.sh
)仍然可以完美运行......
答案1
一个工作示例:
一个名为的简单脚本hello.sh
,将单词 hello 附加到文本文件中(每个命令使用完整路径):
笔记 myuser
是你的用户名
#!/bin/bash
printf 'hello' >> /home/myuser/hello.txt
使用以下命令使脚本可执行chmod +x hello.sh
您可以根据需要更改每分钟运行的 crontab 条目:
* * * * * /home/myuser/hello.sh
一些细节:
每个 cron 任务都以注册它的用户身份运行。如果 root 用户注册了一个 cron 任务,则该任务将以 root 权限运行。
如果非 root 用户注册了一个 cron 作业,则该作业将使用上述用户的权限运行;如果该作业需要 root 权限,则它将失败,因为它是由非 root 用户启动的......
最好使用完整路径调用命令和脚本,以确保 cron 能够正确找到并调用它们,否则它可能会失败而没有有用的反馈。