如何修改cronjob执行定时任务时的输出文件写入路径
问题根因
cron任务执行时默认的工作目录为对应用户的家目录,你使用的Node.js脚本通过相对路径写入文件,路径会基于执行脚本时的当前工作目录计算,而非Node.js脚本自身的存放目录,因此输出文件会被写入/home目录。
解决方案
无需修改第三方Node.js脚本,仅需调整你自行编写的shell脚本,在调用Node.js脚本前切换工作目录到Node.js脚本的存放目录即可,两种常用场景的配置如下:
- 若Node.js脚本和shell脚本存放在同一目录,可通过获取shell自身路径自动切换目录,避免硬编码路径:
#!/bin/bash # 切换到当前shell脚本所在目录,切换失败则直接退出 cd "$(dirname "$0")" || exit 1 # 原有调用逻辑保持不变 node ./xxx.js # 其他依赖输出文件的后续命令...
- 若Node.js脚本和shell脚本不在同一目录,直接写Node.js脚本目录的绝对路径切换即可:
#!/bin/bash # 替换为Node.js脚本实际存放目录的绝对路径 cd /opt/xxx/node_script_dir || exit 1 # 原有调用逻辑保持不变 node ./xxx.js # 其他依赖输出文件的后续命令...
验证方式
修改完成后先手动执行shell脚本,确认输出文件生成在目标目录后,再保留cron定时配置即可。
内容的提问来源于stack exchange,提问作者Dream
相关产品推荐
相关产品推荐

