Ubuntu 20.04 的 Cron 竟然不支持 MAILFROM,而且查了一下,之前的版本据说也不支持,有人说 22.04 开始支持了。好吧,但是我的 R740 服务器不能正常安装这个月才刚发布的 22.04,真是尴尬呀。cron 直接使用系统账户作为发件人 root@gitlab,直接被邮件服务器退信了,不能发邮件。 gitlab@example.com: host smtp.qiye.aliyun.com[59.82.14.215] said: 500 Error: bad syntax (in reply to MAIL FROM command) 当然如果每个任务通过重定向到 mail 客户端也可以发信,不过不能像在 CentOS 中那样在开头指定收发信人了。搜索了一番,可以安装 cronie,它是 CentOS 等发行版系统选择的 cron 实现程序。 卸载掉 cron,安装 cronie cronie 下载地址:https://github.com/cronie-crond/cronie/releases 下载后编译: ./configure --prefix= #注意为空 make make install 安装服务: vim /usr/lib/systemd/system/crond.service [Unit] Description=Command Scheduler After=auditd.service systemd-user-sessions.service time-sync.target [Service] EnvironmentFile=/etc/crond.sysconfig ExecStart=/usr/sbin/crond -n $CRONDARGS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=30s [Install] WantedBy=multi-user.target 从程序根目录拷贝 crond.sysconfig 到 /etc systemctl enable crond.service systemctl start crond OK,又可以像在 CentOS 中那样用 cron 的 MAILFROM 了。 后记: 发现与 at 的目录结构有冲突(都混在 /var/spool/cron/ 中,而 Ubuntu 自带的 cron 文件夹是在 /var/spool/cron/crontabs/),所以还是换成了系统原装的 cron。 暂时就不用 crontab 自带的发信功能了,改用 ssmtp: 删除 postfix apt install ssmtp ssmtp 也提供了 sendmail 供 cron 使用。 配置: vim /etc/ssmtp/ssmtp.conf mailhub=smtp.qiye.aliyun.com:465 AuthUser=gitlab@example.com AuthPass=xxx AuthMethod=LOGIN UseTLS=YES FromLineOverride=NO #Debug=YES vim /etc/ssmtp/revaliases root:gitlab@example.com:smtp.qiye.aliyun.com:46...
阡陌 发布的文章
阡陌Linux 访问 bitlocker 加密分区
安装 dislocker: apt install dislocker 创建两个挂载点: mkdir /mnt/{bitlocker,disk} fdisk -l 查看分区,确定设备文件 /dev/sdb1 解密: dislocker -V /dev/sdb1 -u -- /mnt/bitlocker 如果成功解密可以在挂载点 /mnt/bitlocker 看到加密分区的平面文件 dislocker-file 将其作为一个回环设备挂载: mount -o loop /mnt/bitlocker/dislocker-file /mnt/disk 用完后卸载: umount /mnt/disk umount /mnt/bitlocke...
Ubuntu 20.04 SWAP 分区扩容
系统安装后自动从镜像文件挂载的分区: /etc/fstab /swap.img none swap sw 0 0 swapon --show NAME TYPE SIZE USED PRIO /swap.img file 1.9G 0B -2 停止 SWAP 分区: swapoff /swap.img 调整大小: fallocate -l 16G /swap.img 或: dd if=/dev/zero of=/swap.img bs=1G count=16(蜗牛一样的速度) # fallocate 是预分配,所以速度比 dd 快的多得多。 chmod 600 /swap.img 格式化: mkswap /swap.img Setting up swapspace version 1, size = 16 GiB (17179865088 bytes) no label, UUID=f65b4da2-53cd-46a7-a782-aee321cd4329 # mkswap 可将磁盘分区或文件设为 Linux 的交换区 启用 SWAP 分区: swapon /swap.img swapon --show NAME TYPE SIZE USED PRIO /swap.img file 16G 0B -2 free -h total used free shared buff/cache available Mem: 31Gi 265Mi 23Gi 1.0Mi 7.6Gi 30Gi Swap: 15Gi 0B 15G...
Linux at 命令详解:一次性定时任务调度工具
at 命令是 Linux 系统中用于在指定时间点执行一次性任务的经典工具。与周期性任务调度器 cron 不同,at 任务执行一次后便会自动从队列中移除,适用于临时的、单次的自动化操作。 核心机制 at 命令的运行依赖于后台守护进程 atd。其工作流程如下: 用户通过 at 命令提交一个包含指令或脚本的任务及其执行时间。 atd 进程在后台运行,默认每 60 秒检查一次作业队列。 当系统时间与任务设定的时间匹配时,atd 会调用相应的 shell 来执行该任务。 使用前请务必确保 atd 服务已启动,可使用以下命令检查: systemctl status atd # 查看服务状态 # 或 ps -ef | grep atd # 检查进程是否存在 命令格式与常用选项 基本命令格式: at [选项] [时间] 任务内容可以在输入命令后,在随后的交互式提示中逐行输入,最后按 Ctrl + D 结束并提交。 常用选项速查表: 选项 功能描述 等效命令 -m 任务完成后,无论是否有输出,都向用户发送邮件通知。 -l 列出当前用户所有待执行的 at任务。 atq -d <编号> 删除指定编号的 at任务。 atrm <编号> -c <编号> 查看(cat)指定编号任务的具体命令内容。 -f <文件> 从指定的脚本文件中读取任务命令,而非标准输入。 -t <时间> 使用 [[CC]YY]MMDDhhmm[.ss]格式直接指定时间。 -v 显示任务的详细计划执行时间。 时间参数的指定方法 at 的强大之处在于其高度灵活的时间设定方式。 类别 格式示例 说明 标准时间 08:30 当天 8:30。若已过时,则顺延至次日。 模糊时间 midnight, noon, teatime 分别代表午夜 (00:00)、中午 (12:00)、下午茶 (通常 16:00)。 12小时制 11:00 PM, 9:30am 需明确标注 AM/PM 或 am/pm。 具体日期 11:00 2025-12-25 11:00 12/25/2025 在时间后加上日期。支持 YYYY-MM-DD、MM/DD/YY等格式。 相对计时 now + 2 hours now + 30 minutes now + 1 week 从当前时间算起。单位可为 minutes、hours、days、weeks。 自然日期 tomorrow 17:00 next Monday 使用自然语言指定。 实战应用案例 1、5 天后下午 5 点,列出 /home 目录内容 at 5pm +5 days # 进入交互输入模式 /bin/ls -la /home # 按 Ctrl + D 提交 2、查看当前排队中的任务 atq # 或 at -l 输出示例: 7 Sat Mar 15 17:00:00 2025 a username 3、明天下午 5 点,将当前时间写入日志文件 at 5pm tomorrow date >> /root/date.log # 按 Ctrl + D 提交 4、通过脚本文件提交复杂任务 首先创建脚本 myscript.sh,然后: at -f /path/to/myscript.sh 09:00 next Monday 5、删除已计划的任务 假设通过 atq 查得任务编号为 7: atrm 7 # 或 at -d 7 重要注意事项与技巧 权限管理:系统管理员可以通过 /etc/at.allow 和 /etc/at.deny 文件来控制允许或禁止使用 at 命令的用户。 环境变量:at 任务在执行时会继承当前用户的环境变量,包括当前的工作目录 (PWD)。 输出处理:任务的标准输出和错误默认会通过邮件发送给提交者。如果希望静默执行,可以在命令末尾重定向输出,例如:command > /dev/null 2>&1。 at 与 cron 的选择: 用 at:一次性的、临时的任务(如“2 小时后重启服务”、“明天早上下载文件”)。 用 cron:周期性的、固定频率的任务(如“每天凌晨备份”、“每周一清理日志”)。 总结 at 命令是 Linux 系统管理工具箱中一个轻巧而强大的“定时单次执行”工具。掌握其灵活的时间设定语法和任务管理选项(atq, atrm),可以高效地自动化处理各种临时性后台作...
Ubuntu 20.04 启动时等待网络配置时间过久问题的解决方法
Ubuntu 20.04 启动过程太长,发现启动时长时间等在这里: A start job is running for wait for network to be configured. 启动后进入系统,执行 Linux 系统启动性能统计分析命令: systemd-analyze blame 2min 126ms systemd-networkd-wait-online.service 2.774s systemd-udev-settle.service ... systemd-networkd-wait-online.service 这里等待了持续两分钟 解决方法: Edit /etc/netplan/01-netcfg.yaml and add optional: true to any devices that may not always be available. sudo netplan appl...
Linux 比较两个文件夹
1、diff 方法 diff -qr dir1 dir2 -q 或 --brief 仅显示有无差异,不显示详细的信息。 -r 或 --recursive 比较子目录中的文件。 2、md5 方法 Copy 文件夹之后,检测两个文件夹(dir1,dir2)下文件是否相同。 cd dir1 find ./ -type f -exec md5sum {} \; | sort -k 2 > logdir/dir1.txt cd dir2 find ./ -type f -exec md5sum {} \; | sort -k 2 > logdir/dir2.txt cd logdir diff dir1.txt dir2.txt logdir 是任意一个存放生成文件的目...