我有一个PowerShell脚本来更新数据库表。我想在Cronjob中设置每天运行一次。但是,它似乎在cronjob中不起作用。目前,我已经将其提前了几分钟,这样我就不必等待。
CronTab:
* * * * * pswh -File "/home/administrator/PowerShellScripts/Update-Set-Table.ps1"
端子:
pswh -File "/home/administrator/PowerShellScripts/Update-Set-Table.ps1"
当我在终端中运行该命令时,它工作正常,但似乎不是从cronjob中运行。
答案 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