为什么下面的 cronjob 不起作用?由于手动执行的脚本正在工作,但如果我将其放在 cron 作业上,它就不会执行。
#--------Reports-------------
25 11 * * * /logs/scripts/chim/currbalance_dump.sh >> /logs/currbal.log
脚本如下
#!/bin/bash
sftp [email protected] << SFTP
cd /home/sftpadm/BanKo/CurrBalance/
mget banko_current_balance_`date +%Y%m%d`.csv /logs/Reports/BanKo/CurrBalance
SFTP
exit
文件夹是
/logs/scripts/chim/currbalance_dump.sh
-rwxrwxrwx 1 kycadm kycadm 174 Sep 29 09:43 currbalance_dump.sh
答案1
仔细检查 selinux 是否不是问题所在(作为 root):
audit2allow /var/log/audit/audit.log
根据问题,您可以生成策略以允许:
audit2allow -m local-log-script -o local-log-script.te /var/log/audit/audit.log
编辑它,使其仅包含脚本所需的内容,然后生成并导入 selinux 策略文件:
checkmodule -M -m -o local-log-script.mod local-log-script.te
semodule_package -o local-log-script.pp -m local-log-script.mod
semodule -i local-log-script.pp
我通常将所有这些文件存储在/etc/selinux/custom/
答案2
假设您拥有 /etc/crontab 文件的读/写权限,那么它应该在作业行中包含用户名,如下所示:
crontab -l -u username
25 11 * * * username /logs/scripts/chim/currbalance_dump.sh >> /logs/currbal.log
用户特定的 cron 作业脚本可以在 /var/spool/cron/username 中找到
另外,请确保 bash 脚本已设置可执行位,并且执行脚本的用户有权访问目录 /logs/scripts/chim/
chmod +x currbalance_dump.sh
您还可以将所有脚本放在一个目录中,并使用 run-parts 实用程序来执行该目录中的所有脚本
如果以上一切正常,则检查 crond 守护进程是否正在运行
service crond status
service crond start
每次编写新的 cron 作业时,不需要重新启动 crond 守护进程。
另外,检查用户是否允许运行 cron 作业
less /etc/cron.allow
less /etc/cron.deny