Linux Cronjob没有运行powershell脚本,但是该脚本能够在终端中运行

时间:2020-10-05 07:12:50

标签: linux powershell cron

我有一个PowerShell脚本来更新数据库表。我想在Cronjob中设置每天运行一次。但是,它似乎在cronjob中不起作用。目前,我已经将其提前了几分钟,这样我就不必等待。

CronTab:

* * * * * pswh -File "/home/administrator/PowerShellScripts/Update-Set-Table.ps1"

端子:

pswh -File "/home/administrator/PowerShellScripts/Update-Set-Table.ps1"

当我在终端中运行该命令时,它工作正常,但似乎不是从cronjob中运行。

2 个答案:

答案 0 :(得分:1)

您需要指定可执行文件pwsh的完整路径。您可以通过在终端中使用which APPNAME来实现。

which pwsh

然后相应地更改crontab中的行。对我来说,工作结果如下:

* * * * * /snap/bin/pswh -File "/home/administrator/PowerShellScripts/Update-Set-Table.ps1"

答案 1 :(得分:0)

Cron缺乏环境会产生以下副作用:工作目录更改。就我而言,我正在写一个文件,该文件应该位于脚本的目录中,该文件已在$ HOME中创建并很好地写入了该文件。

脚本的目录保存在PoSh变量$PSScriptRoot

PoSh在/usr/bin/pwsh处有一个符号链接,因此(对于我而言)完整路径不是必需的

当前(Vixie)cron允许使用可用于路径的标准变量。在man crontab

中查看作者

如果您的脚本具有#!/usr/bin/pwsh shebang并且是可执行文件,则它会像任何脚本一样执行,而无需指定'pwsh'

顺便说一句,如果要显示在屏幕上(例如对话框),则cron作业必须以env DISPLAY=:0(或其他一些数字)开头才能显示。例如env DISPLAY=:0 pwsh $ScriptHome/DiskFull-WereGoingToCrash.ps1 -display