我在 crontab 中安排了一个 shell 脚本,但它没有运行,当我尝试手动触发我在 crontab 中使用的相同命令时,我看到了下面的错误
nohup ./home/rahul/data_script/data_backup_scripts/data_backup.sh /home/rahul/data_script/data_backup_scripts/data.param > /home/rahul/data_script/data_backup_scripts/log/nohup.$(date --iso).out
nohup: ignoring input and redirecting stderr to stdout
nohup: failed to run command ‘./home/rahul/data_script/data_backup_scripts/database_backup.sh’: No such file or directory
但我有另一项通过 crontab 安排的工作,该工作正在成功运行,并且我正在触发该工作,如下所示
nohup sh /home/rahul/ddl_script/ddl_backup/ddl_backup.sh /home/rahul/ddl_script/ddl_scripts/data.param > /home/rahul/ddl_script/ddl_scripts/log/nohup.$(date --iso).out
请帮我解决这个问题,当我在此位置执行 ls 时,我可以看到位于此位置的脚本,并且我对该文件夹和子文件夹也有 777 权限
/home/rahul/data_script/data_backup_scripts/database_backup.sh
答案1
首先,您应该删除 ./home 中的点
/home/rahul/data_script/data_backup_scripts/data_backup.sh
该点用于引用您的实际文件夹,但是当您使用完整路径执行某些操作时,您不需要它,除非您的实际文件夹下有子主文件夹结构。
关于重定向,我建议您创建一个调用并执行实际句子的脚本。我在 cron 内部做了重定向,但很难跟踪和测试。因此,创建一个封装您的功能的脚本并单独测试它,然后从 cron 调用它。
最后,关于nohup的使用,你不需要在cron中使用它,因为它是由服务执行的,所以在执行过程中无法注销。
答案2
nohup 命令应该是
nohup /home/rahul/data_script/data_backup_scripts/data_backup.sh /home/rahul/data_script/data_backup_scripts/data.param > /home/rahul/data_script/data_backup_scripts/log/nohup.$(date --iso).out &
点“.”结果是您需要处于根目录“/”才能成功运行它。另外,除非您在后台运行该命令,否则 nohup 没有多大意义,因此末尾有“&”。
答案3
/home 前面的点是错误的。删除它。
由于我对重定向进行了纠正,我仍然会考虑使用中间脚本,以实现更简短的 crontab 文件,这样您可以更灵活地管理日志记录,例如过滤它。