日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【Linux】crontab 定时任务 遇到几个问题

發(fā)布時間:2025/3/20 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux】crontab 定时任务 遇到几个问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • cron 與 crontab 區(qū)別
    • bash xxx.sh 可以執(zhí)行,但是crontab定時任務不執(zhí)行,也沒有報錯信息,無日志;
    • 首先區(qū)分 crontab -e 和 /etc/crontab
    • crond[1655]: (bash) ERROR (getpwnam() failed)
    • 定時任務輸出內(nèi)容寫入 /var/spool/mail/root 文件
    • 日志信息:Removed slice User Slice of root.
    • crontab定時任務不執(zhí)行注意點
    • docker container 使用crontab

cron 與 crontab 區(qū)別

cron 是提供定時任務的服務
crontab 是在cron服務下具體每一條任務,可以理解為 cron table

bash xxx.sh 可以執(zhí)行,但是crontab定時任務不執(zhí)行,也沒有報錯信息,無日志;

* * * * * /root/xxx.sh /root/xxx.conf 1>/dev/null 2>&1

首先區(qū)分 crontab -e 和 /etc/crontab

  • 使用命令 crontab -e 然后直接編輯定時腳本。 時間 +具體的名字
  • 這樣執(zhí)行以后,屬于用戶自定義的,會被寫到 /var/spool/cron 目錄下,生成一個和用戶名一致的文件,文件內(nèi)容就是我們編輯的定時腳本。
  • (系統(tǒng)級的)做系統(tǒng)級配置我們會直接配置 /etc/crontab
  • (用戶級的)一般還是建議大家使用 crontab -e ,這樣系統(tǒng)也會幫著檢查我們配置的腳本語法。
  • 如果用戶級別定時任務(crontab -e)不能執(zhí)行,可以嘗試 改為 系統(tǒng)級別定時任務(/etc/crontab)

crond[1655]: (bash) ERROR (getpwnam() failed)

  • 場景:
    在/etc/crontab中,寫入 * * * * * bash /root/xxx.sh /root/xxx.conf 1>/dev/null 2>&1,報錯crond[1655]: (bash) ERROR (getpwnam() failed)
  • 解決:
沒有寫用戶root導致 * * * * * /root/xxx.sh /root/xxx.conf 1>/dev/null 2>&1 錯誤寫法# * * * * * user-name command to be executed * * * * * root /root/xxx.sh /root/xxx.conf 1>/dev/null 2>&1 正確的方式

定時任務輸出內(nèi)容寫入 /var/spool/mail/root 文件

# 去掉末尾 2>&1 * * * * * root /root/xxx.sh /root/xxx.conf 1>/dev/null

日志信息:Removed slice User Slice of root.

/var/log/messages 文件部分信息

systemd: Created slice User Slice of root. systemd: Started Session 1529 of user root. systemd: Removed slice User Slice of root.

解決

這些是與片的創(chuàng)建和刪除有關(guān)的消息,這些消息在systemd中用于對進程進行分組并管理其資源。
為什么默認情況下會記錄它們,這使我無所適從,但是我已經(jīng)看到了兩種禁用它們的方法:
較少干擾的方法是通過創(chuàng)建具有以下內(nèi)容的/etc/rsyslog.d/ignore-systemd-session-slice.conf來過濾掉它們:

if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Removed Slice" or $msg contains "Stopping user-") then stop

然后重新啟動rsyslogd systemctl restart rsyslog

更廣泛的方法是通過編輯將systemd日志記錄級別設置得更高一些/etc/systemd/system.conf:

#LogLevel=info LogLevel=notice

參考:
https://unix.stackexchange.com/questions/267965/system-log-full-of-session-and-slice-messages
https://access.redhat.com/solutions/1564823

crontab定時任務不執(zhí)行注意點

  • 腳本中涉及文件路徑時寫絕對路徑;

  • 腳本執(zhí)行要用到環(huán)境變量時,通過source命令顯式引入,例如:

  • #!/bin/sh source/etc/profile
  • 當手動執(zhí)行腳本沒問題,但是crontab不執(zhí)行時,可以嘗試在crontab中直接引入環(huán)境變量解決問題,例如:
  • 0 * * * * /etc/profile;/bin/sh/path/to/myscript.sh

    參考鏈接:
    https://zhang.ge/5093.html

    docker container 使用crontab

    見:https://muguang.me/it/2659.html

    總結(jié)

    以上是生活随笔為你收集整理的【Linux】crontab 定时任务 遇到几个问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。