![如何编写 cronjob](https://linux22.com/image/1074143/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%20cronjob.png)
我尝试为erpnext_sync.py
位于的Python 脚本设置 cronjob/home/user_name/frappe-bench/biometric-attendance-sync-tool
$ crontab -l
* * * * * /usr/bin/python3 -c 'from erpnext_sync import main; main()'
当我重新启动 PC 并启动 Ubuntu 或 Windows 终端时,此 cronjob 不起作用。
我可以知道如何每分钟运行这个 cronjob 吗,即使在重启计算机之后。
答案1
通过 运行的作业cron
或启动脚本或systemd
脚本不会在桌面上的同一运行时环境中运行。启动脚本以 运行root
。您的任何PATH
更改或其他环境变量设置都不会~/.bashrc
自动传播到您的cron
作业。例如,没有$DISPLAY
,因此 GUI 程序需要特殊处理(阅读man xhost
)。
cron
人们可以在crontab
文件 Read中为所有作业设置环境变量man 5 crontab
。
echo "=== id ===";id;echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
查看每个环境中的结果 。
一种简单的方法是将命令存储在bash
脚本中,并从终端会话中执行该脚本,保存输出,然后从“其他”环境执行该脚本,保存输出。使用比较保存的输出diff
。
#!/bin/bash
echo "=== id ===";id
echo "=== set ===";set
echo "=== env ===";env | sort
echo "=== alias ===";alias`
由于command
该行的一部分crontab
默认由 解释/bin/sh
,其语法比 更简单/bin/bash
,因此我建议command
调用一个bash
脚本(可执行、已安装、以 开头#!/bin/bash
)来设置环境,然后调用所需的程序。