记一次 cron 环境变量问题排查

之前在服务器上安装了 TimeShift,于是希望每天凌晨自动增量备份一下,于是写了个脚本丢到 crontab 里面执行。
但是第二天查看备份却发现没有备份成功。报错如下:

E: Commands listed below are not available on this system:

 * fuser

Please install required packages and try running TimeShift again

** (process:15106): CRITICAL **: app_lock_remove: assertion 'self != NULL' failed

显然 fuser 已经被安装在系统上,但是并没有被检测到。

经过排查发现,cron 执行命令时,不会自动读取 profile 中的环境变量,而是使用默认的环境变量。而 fuser 的位置为 /usr/sbin/fuser,默认环境变量的 PATH 不包括 /usr/sbin 目录。

因此解决方案就是在脚本的开头加入对 PATH 环境变量的设置。如果 cron 的定时任务出现未预期的结果,请考虑是环境变量的因素导致执行出错。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注