mac 设置crontab -e : "/usr/bin/vi" exited with status 1

本文介绍如何解决Mac系统中使用crontab添加任务时出现的问题,包括提示/usr/bin/vi exited with status 1的情况。通过将默认编辑器更改为vim,并提供详细的步骤来帮助用户成功配置并启动crontab服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mac想用crontab -e添加任务:

crontab -e

但是发现会提示:

"/usr/bin/vi" exited with status 1

查看任务列表,也会发现没有创建成功:

crontab -l
上边命令会出现:no crontab for username

出现上述问题的原因是什么呢?
原因:系统没有安装vi
解决方法:设置vim为默认编辑器
1、打开~/.bash_profile文件编辑:

export EDITOR=vim

2、保存好后重新载入配置:

source .bash_profile

3、重新执行创建任务命令:

创建crontab文件:sudo touch /etc/crontab 
编写自己的计划任务:crontab -e

4、然后查看是否创建成功:

crontab -l

5、成功后开启crontab服务:

开启:sudo /usr/sbin/cron start
重启:sudo /usr/sbin/cron restart
停止:sudo /usr/sbin/cron stop
[root@prd-zyzb-m-zone-proxy ~]# systemctl restart sshd Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xeu sshd.service" for details. [root@prd-zyzb-m-zone-proxy ~]# journalctl -xeu journalctl: option requires an argument -- 'u' [root@prd-zyzb-m-zone-proxy ~]# journalctl -xe ░░ An ExecStart= process belonging to unit sshd.service has exited. ░░ ░░ The process' exit code is 'exited' and its exit status is 255. Mar 26 16:20:55 prd-zyzb-m-zone-proxy systemd[1]: sshd.service: Failed with result 'exit-code'. ░░ Subject: Unit failed ░░ Defined-By: systemd ░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel ░░ ░░ The unit sshd.service has entered the 'failed' state with result 'exit-code'. Mar 26 16:20:55 prd-zyzb-m-zone-proxy systemd[1]: Failed to start OpenSSH server daemon. ░░ Subject: A start job for unit sshd.service has failed ░░ Defined-By: systemd ░░ Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel ░░ ░░ A start job for unit sshd.service has finished with a failure. ░░ ░░ The job identifier is 3203058 and the job result is failed. Mar 26 16:21:01 prd-zyzb-m-zone-proxy CROND[2143556]: (yunqiao) CMD (/opt/yunqiao/itcloudagent/bin/daemon >/dev/null 2>&1 &) Mar 26 16:21:02 prd-zyzb-m-zone-proxy CROND[2143555]: (yunqiao) CMDEND (/opt/yunqiao/itcloudagent/bin/daemon >/dev/null 2>&1 &) Mar 26 16:21:02 prd-zyzb-m-zone-proxy crontab[2143562]: (yunqiao) LIST (yunqiao) Mar 26 16:21:02 prd-zyzb-m-zone-proxy crontab[2143566]: (yunqiao) LIST (yunqiao) Mar 26 16:21:13 prd-zyzb-m-zone-proxy crontab[2143796]: (yunqiao) LIST (yunqiao) Mar 26 16:21:13 prd-zyzb-m-zone-proxy crontab[2143800]: (yunqiao) LIST (yunqiao) ~
03-27
<think>我们正在解决的是在Shell脚本中遇到"ffmpegnotfound"错误的问题。这种错误通常是由于系统未安装ffmpeg,或者ffmpeg不在可执行路径中,或者脚本中使用了错误的路径导致的。以下将分步骤解决。###步骤1:验证ffmpeg是否安装首先,我们需要确认系统上是否安装了ffmpeg。在终端中运行:```bashffmpeg-version```如果输出了ffmpeg的版本信息,则说明已安装;如果提示"commandnotfound",则说明未安装。###步骤2:安装ffmpeg(如果未安装)根据不同的操作系统,安装ffmpeg的方法不同。####Ubuntu/Debian系统```bashsudoaptupdatesudoaptinstallffmpeg```####CentOS/RHEL系统```bashsudoyuminstallepel-releasesudoyumupdatesudoyuminstallffmpegffmpeg-devel```####macOS(使用Homebrew)```bashbrewinstallffmpeg```####Windows在Windows上,可以从[FFmpeg官方网站](https://ffmpeg.org/download.html)下载预编译的二进制文件,并将其所在目录添加到系统环境变量PATH中。###步骤3:检查ffmpeg是否在PATH中如果已安装但脚本中仍报错,可能是因为ffmpeg不在脚本的执行环境中。可以通过以下命令查看ffmpeg的安装位置:```bashwhichffmpeg```在Linux/macOS中,通常会输出`/usr/bin/ffmpeg`或类似路径。在脚本中,可以通过绝对路径调用ffmpeg,例如:```bash/usr/bin/ffmpeg[options]```或者将ffmpeg的路径添加到脚本的PATH环境变量中:```bashexportPATH=$PATH:/path/to/ffmpeg/directory```###步骤4:检查脚本中的ffmpeg命令在脚本中,确保调用ffmpeg的命令正确。例如,不要拼写错误(如`ffmpeg`写成了`ffmepg`)。###步骤5:处理依赖问题(参考引用[1])在引用[1]中,出现了ffnvcodec依赖缺失的问题。如果安装ffmpeg时遇到类似问题,需要安装对应的依赖。例如,在Ubuntu上,可以尝试:```bashsudoaptinstalllibavcodec-extra```或者从源码编译ffmpeg并启用所需的编解码器。###步骤6:检查环境变量(参考引用[3]和[4])引用[3]和[4]中提到了环境配置问题。确保在运行脚本的环境中,PATH变量包含ffmpeg的路径。可以在脚本开头添加:```bashexportPATH="/path/to/ffmpeg:$PATH"```###步骤7:使用绝对路径调用ffmpeg如果以上步骤都不能解决问题,可以在脚本中使用ffmpeg的绝对路径。例如,在Ubuntu中,通常为`/usr/bin/ffmpeg`。###示例脚本假设我们有一个脚本`convert_video.sh`,内容如下:```bash#!/bin/bash#确保ffmpeg在PATH中,或者使用绝对路径exportPATH="/usr/bin:$PATH"#或者直接使用绝对路径#FFMPEG_CMD="/usr/bin/ffmpeg"#使用ffmpeg转换视频ffmpeg-iinput.mp4output.avi```如果ffmpeg安装在非标准路径,请替换为实际路径。###总结解决"ffmpegnotfound"问题的主要步骤:1.确认ffmpeg是否安装,若未安装则安装。2.确保ffmpeg在PATH环境变量中,或使用绝对路径调用。3.检查依赖是否完整,尤其是从源码编译的情况。4.在脚本中显式设置PATH或使用绝对路径。§§相关问题§§1.如何从源码编译安装ffmpeg?2.在Docker容器中如何安装ffmpeg?3.如何解决ffmpeg的依赖问题?4.在Windows系统中如何将ffmpeg添加到PATH?</think>### 解决 Shell 脚本中 "ffmpeg not found" 错误的完整指南 #### 问题分析 当 Shell 脚本中出现 "ffmpeg not found" 错误时,通常由以下原因导致: 1. **ffmpeg 未安装**:系统未安装 ffmpeg 程序 2. **路径配置错误**:ffmpeg 不在系统 PATH 环境变量中 3. **依赖缺失**:ffmpeg 运行时缺少必要的依赖库(如引用[1]提到的 ffnvcodec) 4. **环境问题**:脚本执行环境与当前用户环境不一致(如 cron 任务) --- #### 解决方案步骤 ##### 1. 验证 ffmpeg 是否安装 ```bash # 检查 ffmpeg 是否存在于系统中 which ffmpeg || type ffmpeg # 检查已安装版本 ffmpeg -version ``` - 如果无输出,说明未安装(进入步骤 2) - 如果输出路径如 `/usr/local/bin/ffmpeg`,说明已安装但路径未配置(进入步骤 3) ##### 2. 安装 ffmpeg(若未安装) **Ubuntu/Debian**: ```bash sudo apt update sudo apt install ffmpeg ``` **CentOS/RHEL**: ```bash sudo yum install epel-release sudo yum install ffmpeg ffmpeg-devel ``` **macOS (Homebrew)**: ```bash brew install ffmpeg ``` **Windows**: 1. 从[官网下载](https://ffmpeg.org/download.html)预编译版本 2. 解压后将 `ffmpeg.exe` 所在目录加入系统 PATH ##### 3. 解决路径问题 **方法1:在脚本中指定绝对路径** ```bash #!/bin/bash # 使用 which 查找 ffmpeg 路径 FFMPEG_PATH=$(which ffmpeg) # 使用绝对路径调用 $FFMPEG_PATH -i input.mp4 output.avi ``` **方法2:修改 PATH 环境变量** ```bash #!/bin/bash # 将常见 ffmpeg 安装路径加入 PATH export PATH=$PATH:/usr/local/bin:/usr/bin:/opt/ffmpeg/bin # 现在可直接调用 ffmpeg -i input.mp4 output.avi ``` ##### 4. 处理依赖缺失问题(如引用[1]的 ffnvcodec) ```bash # Ubuntu/Debian 安装缺失依赖 sudo apt install libavcodec-extra # CentOS/RHEL sudo yum install ffnvcodec # 安装后重新配置 ffmpeg -reconfigure ``` ##### 5. 验证环境一致性 ```bash # 检查当前用户 PATH echo $PATH # 在脚本开头记录环境(调试用) env > /tmp/script_env.log ``` --- #### 特殊场景解决方案 **场景1:cron 任务报错**(环境变量不同) ```bash # 在 crontab 中指定完整环境 * * * * * . /home/user/.profile; /path/to/your/script.sh ``` **场景2:交叉编译环境**(如引用[3]) ```bash # 明确指定交叉编译的 ffmpeg 路径 export CROSS_FFMPEG=/opt/cross/bin/ffmpeg $CROSS_FFMPEG -version ``` **场景3:容器环境中**(如 Docker) ```Dockerfile # Dockerfile 示例 FROM ubuntu:20.04 RUN apt update && apt install -y ffmpeg COPY your_script.sh /app/ CMD ["/app/your_script.sh"] ``` --- #### 调试技巧 1. **详细错误日志**: ```bash # 捕获详细错误信息 ffmpeg -i input.mp4 output.avi 2> ffmpeg_errors.log ``` 2. **依赖检查**: ```bash # 检查动态链接库 ldd $(which ffmpeg) ``` 3. **测试最小命令**: ```bash # 简单验证功能 ffmpeg -f lavfi -i "sine=frequency=1000" -t 1 test.wav ``` --- #### 总结流程 ```mermaid graph TD A[ffmpeg not found] --> B{检查安装} B -->|未安装| C[安装ffmpeg] B -->|已安装| D{检查路径} D -->|路径错误| E[脚本中指定绝对路径] D -->|PATH缺失| F[修改PATH变量] A --> G{依赖缺失} G --> H[安装libavcodec-extra/ffnvcodec] A --> I{环境问题} I --> J[cron/Docker/交叉编译特殊处理] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值