日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

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

文章目錄

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

cron 與 crontab 區別

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

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

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

首先區分 crontab -e 和 /etc/crontab

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

定時任務輸出內容寫入 /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.

解決

這些是與片的創建和刪除有關的消息,這些消息在systemd中用于對進程進行分組并管理其資源。
為什么默認情況下會記錄它們,這使我無所適從,但是我已經看到了兩種禁用它們的方法:
較少干擾的方法是通過創建具有以下內容的/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定時任務不執行注意點

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

  • 腳本執行要用到環境變量時,通過source命令顯式引入,例如:

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

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

    docker container 使用crontab

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。